部分对象(CreateFileMapping)的I / O是否比基本apis(Read / WriteFile)更快?

时间:2010-11-10 07:29:14

标签: windows file-io filesystems virtual-memory memory-mapped-files

  1. CreateFileMapping和MapViewOfFile,然后我们使用memcpy这样的函数进行I / O.
  2. 只需使用Read / WriteFile。
  3. 第一个比第二个更快吗? 我不明白。

    为什么它更快?
    如果我们使用section对象,那么我们可以从VMM或Cache Manager获得更多缓存优势吗?

2 个答案:

答案 0 :(得分:2)

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

如果内存映射文件中的内存未更改,则无需将页面刷新到页面文件,因为数据已存在于文件中,并且窗口可以从磁盘重新读取页面。 .EXE和.DLL文件使用此机制加载,因此是他们自己的页面存储。

如果写入了内存映射文件中的内存,则页面输出与使用页面文件的方式相同。可能更快,因为使用磁盘上的相同位置(受NTFS优化)。

普通API使用页面文件支持的内存来保存文件内存时的内容。

在稍微不同的透视图中,两个API都经过优化,因为内存映射文件实际上可以在引擎盖下使用读/写文件API,因此当您使用较低的抽象时,您将获得微优化

这两种机制都将使用VMM /缓存管理器。

答案 1 :(得分:0)

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