我将一个大文件(~200GB)内存映射到单个区域/视图中并按顺序写入。我时不时地执行一个boost::interprocess::mapped_region::flush(last, current, false)
.
一段时间后,该进程就会耗尽整个系统内存。据我了解,这是正常的,因为它将随着其他进程请求内存而释放内存。
这在 Windows 8 上运行良好。但是,在 Windows 7 上运行时,它似乎不能很好地与 AJA 显卡驱动程序配合使用,并且开始影响性能(丢弃 IO 数据包)。
有什么方法可以强制 Windows 7 将部分内存刷新到磁盘(数据写入后,只有几秒钟有意义,请记住我是按顺序写入整个文件),以免用完整个可用系统内存?
法拉盛与填海无关,IYAM。它只是确保脏页被写出(我认为您仍然需要磁盘同步来确保它实际上/击中磁盘/)。
因此,您正在寻找一种取消映射的方法。
也许你可以使用像这样的函数
-
EmptyWorkingSet驱逐尽可能多的页面
-
SetProcessWorkingSetSize暂时减少允许的进程工作集。
当然,以更便携的方式,您可能只需取消映射和重新映射即可。如果访问的是旋转 HDD 并且在重新映射之间保持顺序,则可能不会出现性能损失(但是,如果内核预取数据,例如由于madvise()
或 Windows 的等效项)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)