我在运行64位窗口的32位旧版应用程序时遇到问题。有问题的应用程序使用CreateFileMapping创建共享内存。当它在64位Windows上运行时,从另一个进程访问此共享内存的任何尝试都需要大约1秒的时间。共享内存使用页面保护标志创建:移动到64位操作系统时的共享内存性能降低
flProtect = PAGE_READONLY | SEC_NOCACHE | SEC_COMMIT;
使用创建相同的内存时:
flProtect = PAGE_READONLY | SEC_COMMIT;
问题消失。目前这种解决方法是可以接受的,但我们确实有一些设备需要设置SEC_NOCACHE标志。
有人能告诉我为什么SEC_NOCACHE会影响这种情况下的性能吗?
更新:似乎只写入此缓冲区已增加到1000毫秒。阅读似乎没有受到影响。在这段时间里,我们正在向缓冲区写入大约5MB的数据。
Update2:该软件用于许多系统,其中一个系统具有需要使用此标志的物理设备。我们目前仅限于在32位窗口中使用此设备运行机器。
'SEC_NOCACHE':*应用程序不应该使用此属性,除非设备明确需要。*是否有任何理由使用此标志?你(或最初的实施者)是否误解了它的目的? – peterchen 2010-09-04 09:21:34
我们有一个需要设置此标志的设备。 – Justin 2010-09-08 15:41:56