造成这种性能差异的原因是什么?

时间:2016-03-02 14:23:06

标签: c++ windows memory-mapped-files

我正在构建一个用于旋转驱动器的缓存文件(大约70MB用于测试),因为我在其中对事物进行了排序,所以涉及到大量随机IO,通过缓存顺序项来稍微缓解但是我也有内存限制。

无论如何,在我

之间出现差异

a)新创建文件并将其写入数据~100s

b)打开同一个文件并将其写满数据〜30s

我正在使用内存映射文件来访问它们,当我新建一个文件时,我当然会预先分配。我验证了所有数据,准确无误。

我写的数据每次都略有不同(例如5%的差异均匀分布在各处)。可能是因为当我写一个mmf,并用相同的数据覆盖某些东西时,它并不认为它是一个脏页面,因此根本没有写任何东西?怎么会知道?

或许windows或硬件上会出现某种写缓存?

1 个答案:

答案 0 :(得分:0)

尝试追踪the page faults。或者至少,尝试使用进程资源管理器监视每个写入阶段的页面错误。

无论如何,当您使用写访问权限打开同一文件时,文件将被重新创建",但在内存中,现有的映射分页将保留为原样。然后,在写作过程中,如果数据在整个页面内是二进制相同的(通常每页4k,从统计上来说这可能与您的数据一起发生),页面内容将不会被标记为"更新" 。因此,在关闭文件时,某些页面不会发生刷新,这就是为什么您会发现性能差异很大的原因。