我有一个大型二进制文件(大约1 GB),我想按顺序处理。我正在使用内存映射文件来访问该文件。有没有办法告诉Windows尽快交换整个文件?目前,看起来好像每次发生页面错误时窗口只加载一个页面,导致处理速度非常慢。
答案 0 :(得分:2)
我真的很惊讶没有人提到PrefetchVirtualMemory:
BOOL WINAPI PrefetchVirtualMemory(
_In_ HANDLE hProcess,
_In_ ULONG_PTR NumberOfEntries,
_In_ PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses,
_In_ ULONG Flags
);
以下是其他一些链接:
Performance of Win32 memory mapped files vs. CRT fopen/fread
http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files
就我个人而言,我不知道这对您的申请是否是一个好主意。但是当然 - 尝试一下,看看它是否有帮助!
恕我直言..
答案 1 :(得分:1)
当您希望强制将一大块文件分页到内存中时,请使用您用于创建文件映射的文件句柄调用ReadFile
。