我正在内存中将一个大文件(~200 to )映射到一个区域/视图中,然后按顺序写入该文件。我不时地执行一个boost::interprocess::mapped_region::flush(last, current, false)。
一段时间后,该进程耗尽了整个系统内存。据我所知,这是正常的,因为它将在其他进程请求内存时释放内存。
但是,在Windows 7上运行似乎不太适合AJA视频卡的驱动程序,它开始影响性能(丢弃IO数据包)。
有没有办法迫使Windows 7将部分内存刷新到磁盘(在写入数据之后,只需要几秒钟时间,并记住我正在按顺序写入整个文件),以避免耗尽整个可用的系统内存?
发布于 2014-06-16 22:52:11
冲厕与填海无关,IYAM。它只会确保写出脏页(我认为您仍然需要磁盘同步来确保它实际上是/hit磁盘/)。
所以,你在找一条通往地图的路。
也许你可以使用这样的函数
EmptyWorkingSet将尽可能多地删除页面SetProcessWorkingSetSize临时减少允许的进程工作集。当然,以一种更便携的方式,您可能只需取消映射和重新映射即可。如果访问是对旋转HDD的,并且在映射之间保持顺序,则可能不会造成性能损失(但是,如果内核预取数据(例如由于madvise()或与之等价的windows ),则可能会造成性能损失。
https://stackoverflow.com/questions/24249763
复制相似问题