释放内存映射的内存

我是一个内存映射一个大文件(~200GB)到一个单一的区域/视图,并顺序写入它。 每隔一段时间我执行一个boost::interprocess::mapped_region::flush(last, current, false)

过了一段时间,该过程耗尽整个系统内存。 据我所知,这是正常的,因为它将释放内存作为其他进程请求内存。

这在Windows 8上运行良好。但是,在Windows 7上运行它似乎没有与AJAvideo卡的驱动程序打好,它开始影响性能(丢弃IO数据包)。

有没有什么办法可以强制Windows 7将内存中的部分内容刷新到磁盘(写入数据后只有几秒钟的时间,记住我正在按顺序遍历整个文件),以便不用整个可用的系统内存?

法拉盛与填海无关,IYAM。 它只是确保脏页被写出(我认为你仍然需要一个磁盘同步,以确保它实际上/击中磁盘/)。

所以,你正在寻找一种解除映射的方法。

也许你可以使用像

  • EmptyWorkingSet清除尽可能多的页面
  • SetProcessWorkingSetSize临时减少允许的进程工作集。

当然,以更便携的方式,你可能会放弃去映射和重新映射。 如果访问是旋转硬盘并且在重映射中保持顺序,那么可能不会有性能损失(如果内核预取数据(例如,由于madvise()或等同的窗口)