use*_*305 10 c++ memory-mapped-files
我使用内存映射文件对Windows 7 64位下的大量图像文件(~10000 x 16 MB)进行读/写访问.我的目标是:
尽可能多地缓存数据.
能够分配新图像并尽快写入.
因此我使用内存映射文件来访问文件.缓存效果很好,但操作系统不会刷新脏页,直到我几乎没有物理内存.因为一旦物理内存被填满,分配和写入新文件就会很慢.
一种解决方案是定期使用FlushViewOfFiles()
,但在数据写入磁盘之前,此函数不会返回.
有没有办法异步刷新文件映射?我发现的唯一的解决办法是Unmap()
和MapViewOfFile()
再次,但使用这种方法,我不能肯定再次获得相同的数据指针.有人可以提出更好的方法吗?
编辑:阅读WINAPI
文档一段时间,似乎我找到了适合我的问题的解决方案:
调用VirtualUnlock()
未锁定的内存范围会导致刷新脏页.
小智 2
我听说 FlushViewOfFile() 函数不会等到它物理写入文件。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366563(v=vs.85).aspx
FlushViewOfFile 函数不会刷新文件元数据,并且不会等到更改从底层硬件磁盘缓存刷新并物理写入磁盘后才返回。
调用“FlushFileBuffers( ... )”后,您的数据将被物理写入磁盘。