【发布时间】:2012-07-09 07:58:31
【问题描述】:
我正在使用内存映射文件在 Windows 7 64 位下对大量图像文件(~10000 x 16 MB)进行读/写访问。我的目标是:
缓存尽可能多的数据。
能够分配新图像并尽快写入。
因此,我使用内存映射文件来访问这些文件。缓存效果很好,但操作系统不会刷新脏页,直到我几乎没有物理内存。因为一旦物理内存被填满,分配和写入新文件会很慢。
一种解决方案是定期使用FlushViewOfFile(),但该函数在数据写入磁盘之前不会返回。
有没有办法异步刷新文件映射?我找到的唯一解决方案是再次使用Unmap() 和MapViewOfFile(),但是使用这种方法我不能确定再次获得相同的数据指针。有人可以提出更好的方法吗?
编辑:
再看WINAPI文档,似乎找到了适合我的问题的解决方案:
在未锁定的内存范围上调用VirtualUnlock() 会导致脏页刷新。
【问题讨论】:
标签: c++ windows winapi memory-mapped-files