释放内存映射内存

4
我正在将一个大文件(约200GB)映射到单个区域/视图中并进行顺序写入。时不时地,我会执行boost::interprocess::mapped_region::flush(last, current, false)

过一段时间后,该进程将使用完整个系统内存。从我所了解的情况来看,这是正常的,因为它将在其他进程请求内存时释放内存。

在Windows 8上表现良好。但在Windows 7上运行时,似乎与AJA视频卡的驱动程序不兼容,并且会影响性能(IO数据包下降)。

是否有任何方法可以强制Windows 7将某些内存部分刷新到磁盘上(数据写入后仅几秒钟感兴趣,并且请记住,我正在通过整个文件进行顺序写入),以避免使用完整个可用系统内存?


3
请评论,如果为-1。 - ronag
1个回答

3
刷新与回收无关,只是确保脏页被写出(我认为您仍需要磁盘同步才能确保它实际上“命中磁盘”)。
因此,您正在寻找一种取消映射的方法。
也许您可以使用类似于以下函数的功能:
- EmptyWorkingSet 以尽可能多地驱逐页面 - SetProcessWorkingSetSize 以临时减少允许的进程工作集大小。
当然,在更加可移植的方式中,您可能只需取消映射和重新映射即可。如果访问的是旋转硬盘并且在重新映射中保持连续,则可能没有性能损失(但如果内核预取数据例如由于或其Windows等效部分可能存在)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接