1. CreateFileMapping和MapViewOffile,然后使用Memcpy之类的函数进行I/O。
  2. 只需使用读/写文件即可。

第一个比第二个快吗?我不明白。

为什么更快?
如果我们使用部分对象,那么我们可以从VMM或Cache Manager中获得更多的缓存受益?

有帮助吗?

解决方案

出现页面时,文件内存映射更快,因为文件本身用作分页存储。

如果不更改内存映射文件中的内存,则无需将页面汇总到文件文件中,因为数据已经在文件中了,并且Windows可以从磁盘重新阅读页面。 .exe和.dll文件使用此机制加载,因此是他们自己的页面存储。

如果写入内存映射文件中的内存,则页面与使用分页文件相同。使用磁盘上的同一位置可能会更快(受NTFS优化)。

普通的API消耗页面文件备份的内存,以在内存中保存文件的内容。

从略有不同的角度来看,两种API均被优化,因为内存映射的文件实际上可能被使用了,因此在引擎盖下的读/写文件API,因此在使用较低的抽象时,您可以在微观上获得微观的变化

这两种机制都将采用VMM/CACE Manager。

其他提示

使用ReadFile/WriteFile涉及多个额外的内存块复制操作,因此比使用MMF的使用要慢。另一个问题是它将慢得多 - 这是您需要衡量自己的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top