Emb*_*rog 13 c++ performance winapi memory-mapped-files
我需要按顺序读取(扫描)文件并处理其内容.文件大小可以是从非常小(某些KB)到非常大(某些GB)的任何内容.
我尝试在Windows 7 64位上使用VC10/VS2010的两种技术:
我认为内存映射文件技术可能比CRT函数更快,但是一些测试显示两种情况下的速度几乎相同.
以下C++语句用于MMF:
HANDLE hFile = CreateFile(
filename,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL
);
HANDLE hFileMapping = CreateFileMapping(
hFile,
NULL,
PAGE_READONLY,
0,
0,
NULL
);
Run Code Online (Sandbox Code Playgroud)
按顺序读取文件,按块查看; 每个块SYSTEM_INFO.dwAllocationGranularity
的大小.
考虑到MMF和CRT的速度几乎相同,我使用CRT功能,因为它们更简单,更多平台.但我很好奇:我是否正确使用MMF技术?在这种情况下,扫描文件的MMF性能顺序与CRT相同,这是正常的吗?
谢谢.
val*_*ldo 14
我相信如果按顺序访问文件,你看不会有多大区别.由于文件I/O被高度缓存,因此可能也会使用+预读.
如果你在文件数据处理过程中有很多"跳跃",那就会有所不同.然后,每次设置新文件指针并读取新文件部分可能会杀死CRT,而MMF将为您提供最大可能的性能