我们在这里遇到了一些问题,即 MapViewOfFile 在大容量(数百 GB)上的 64 位性能问题;
在 32 位下,我们的应用程序映射了成千上万个 64 Kb 大小的视图,在数据库中随意交换。在64位下,整个数据库终于可以映射到我们进程的虚拟地址空间了。到目前为止,一切都很好。
人们会期望 64 位版本的性能比 32 位版本好得多,因为我们让 Windows 处理所有交换(如果需要的话,也就是说,这主要取决于服务器中存在的物理内存量)。
然而,在实践中,64 位版本(一次将所有文件映射到内存中)的性能要差得多,花费的时间是 32 位版本通过数据库工作的时间的 2 到 40 倍。
我们排除了很多因素,看来确实是Windows自身的Common Cache造成的。(我们主要但不完全使用 Windows Server 2008——不过,这是一个全面的问题。)
将大文件映射到内存一次时,我们可以做些什么来获得您所期望的额外加速?(与手动连续映射和交换小块相反。)
提前致谢!