【发布时间】:2018-11-24 22:51:18
【问题描述】:
我正在使用 NSM 在单独的进程之间交换数据,并且一切正常且花花公子,但是在页面文件中声明了内存空间,我认为这是一种默认方式。
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
我的问题是,文件是在磁盘上声明的,然后将实际内容放入 RAM 中,然后从那里访问吗? 我一直在我的家用计算机上进行实验,这是 i5 4 核、16 GB 1800 MHz RAM 和 SSD,以及实验室的 i9 12 核、32 GB 2800 MHz RAM 和 HDD.
“更好”的计算机会慢很多倍(相同的实验参数),但有人告诉我它与 SSD 或 HDD 没有任何关系。 实验算法大量使用 NSM 进行数据交换,所以如果它必须访问磁盘上的文件,我可以看到为什么它会更慢,但如果都是 RAM ......那么呢?
【问题讨论】:
-
所以你问为什么有些代码在一台机器上运行速度较慢而没有提供任何关于这段代码在做什么的细节,是吧?甚至不清楚你为什么会突然责怪 NSM。如果您怀疑 HDD,则可以通过调用
VirtualLock禁用页面文件或将映射页面固定到 RAM。 -
@VTT 我只是想知道 NSM 到底在做什么。如果它正在使用 RAM 或不断读/写磁盘.. 理论上
-
您是否在检查两台机器上的分页设置是否相同?您是否在进行基准测试以隔离真正延迟进程的代码?
-
@Rochi 是的,我想找出导致性能主要差异的原因。两台机器上的分页文件都是 8GB。更快的 i5 运行是在 Win 7 上,而另一个是在 Win 10 上。我不知道这是否真正影响了性能。
-
@Rochi 基本上,i9 在各方面都应该优于 i5。唯一的硬件是 i9 上的 HDD,而 i5 使用的是三星固态硬盘。程序设置和实验参数完全相同。
标签: c++ shared-memory file-mapping