i/o与基本对象(CreateFileMapping)的i/o比基本API(read/writeFile)快吗?
-
30-09-2019 - |
题
- CreateFileMapping和MapViewOffile,然后使用Memcpy之类的函数进行I/O。
- 只需使用读/写文件即可。
第一个比第二个快吗?我不明白。
为什么更快?
如果我们使用部分对象,那么我们可以从VMM或Cache Manager中获得更多的缓存受益?
解决方案
出现页面时,文件内存映射更快,因为文件本身用作分页存储。
如果不更改内存映射文件中的内存,则无需将页面汇总到文件文件中,因为数据已经在文件中了,并且Windows可以从磁盘重新阅读页面。 .exe和.dll文件使用此机制加载,因此是他们自己的页面存储。
如果写入内存映射文件中的内存,则页面与使用分页文件相同。使用磁盘上的同一位置可能会更快(受NTFS优化)。
普通的API消耗页面文件备份的内存,以在内存中保存文件的内容。
从略有不同的角度来看,两种API均被优化,因为内存映射的文件实际上可能被使用了,因此在引擎盖下的读/写文件API,因此在使用较低的抽象时,您可以在微观上获得微观的变化
这两种机制都将采用VMM/CACE Manager。
其他提示
使用ReadFile/WriteFile涉及多个额外的内存块复制操作,因此比使用MMF的使用要慢。另一个问题是它将慢得多 - 这是您需要衡量自己的东西。
不隶属于 StackOverflow