2014-06-16 126 views
4

我是将大文件(〜200GB)映射到单个区域/视图并按顺序写入内存的内存。我偶尔会执行一个boost::interprocess::mapped_region::flush(last, current, false)释放内存映射内存

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

这在Windows 8上运行良好。但是,在Windows 7上运行时,似乎无法与AJA视频卡的驱动程序一起运行,并且它开始影响性能(丢弃IO数据包)。

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

+3

请评论是否为-1。 – ronag

回答

3

法拉盛与填海,IYAM没有任何关系。它只是确保脏页被写出(我认为你仍然需要磁盘同步来确保它实际上/击中了磁盘/)。

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

也许你可以使用一个功能类似

当然,在一个更便携的方式,你可能会离开unmapping和remapping。如果访问是旋转HDD并且在重映射中保持顺序,则可能不会有性能损失(如果内核预取数据(例如由于madvise()或与其等效的窗口)可能没有性能损失)