【发布时间】:2011-04-07 22:18:50
【问题描述】:
我遇到了在 64 位 Windows 上运行的 32 位旧版应用程序的问题。有问题的应用程序使用 CreateFileMapping 创建共享内存。当它在 64 位 Windows 上运行时,从另一个进程访问此共享内存的任何尝试大约需要 1 秒。共享内存是使用页面保护标志创建的:
flProtect = PAGE_READONLY | SEC_NOCACHE | SEC_COMMIT;
当使用相同的内存创建时:
flProtect = PAGE_READONLY | SEC_COMMIT;
问题消失了。目前这种解决方法是可以接受的,但我们确实有一些设备需要设置 SEC_NOCACHE 标志。
有人能告诉我为什么 SEC_NOCACHE 在这种情况下会影响性能吗?
更新:似乎只写入此缓冲区已增加到 1000 毫秒。阅读似乎没有受到影响。这次我们正在向缓冲区写入大约 5MB。
Update2:该软件用于许多系统,其中一个系统具有需要使用此标志的物理设备。我们目前仅限于使用此设备在 32 位窗口中运行机器。
【问题讨论】:
-
SEC_NOCACHE: 除非设备明确要求,否则应用程序不应使用此属性。您是否有任何理由使用此标志?您(或最初的实施者)是否误解了它的目的? -
我们的设备需要设置此标志。
标签: c++ windows winapi ipc shared-memory