gpt4 book ai didi

c++ - 如何异步刷新内存映射文件?

转载 作者:可可西里 更新时间:2023-11-01 16:46:37 26 4
gpt4 key购买 nike

我正在使用内存映射文件对 Windows 7 64 位下的大量图像文件 (~10000 x 16 MB) 进行读/写访问。我的目标是:

  1. 尽可能多地缓存数据。

  2. 能够分配新图像并尽快写入这些图像。

因此我使用内存映射文件来访问这些文件。缓存运行良好,但操作系统不会刷新脏页,直到我几乎用完物理内存。因此,一旦物理内存被填满,分配和写入新文件的速度就会非常慢。

一种解决方案是定期使用 FlushViewOfFile(),但此函数只有在数据写入磁盘后才会返回。

有没有办法异步刷新文件映射?我找到的唯一解决方案是再次使用 Unmap()MapViewOfFile(),但是使用这种方法我无法确保再次获得相同的数据指针。有人可以建议更好的方法吗?

编辑:稍微阅读 WINAPI 文档,似乎我找到了适合我的问题的解决方案:

在未锁定的内存范围内调用 VirtualUnlock() 会导致刷新脏页。

最佳答案

我听说 FlushViewOfFile() 函数不会等到它实际写入文件。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366563(v=vs.85).aspx

The FlushViewOfFile function does not flush the file metadata, and it does not wait to return until the changes are flushed from the underlying hardware disk cache and physically written to disk.

在调用“FlushFileBuffers( ... )”之后,您的数据将被物理写入磁盘。

关于c++ - 如何异步刷新内存映射文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com