У меня проблема с 32-разрядным устаревшим приложением, работающим в 64-разрядных окнах. Рассматриваемое приложение использует CreateFileMapping для создания общей памяти. Когда это выполняется в 64-битной Windows, любая попытка доступа к этой общей памяти из другого процесса занимает около 1 секунды. Общая память создается с использованием флагов защиты страниц:
flProtect = PAGE_READONLY | SEC_NOCACHE | SEC_COMMIT;
при создании той же памяти с помощью:
flProtect = PAGE_READONLY | SEC_COMMIT;
проблема исчезает. На данный момент этот обходной путь приемлем, но у нас есть некоторые устройства, для которых требуется установить флаг SEC_NOCACHE.
Может кто-нибудь объяснить мне, почему SEC_NOCACHE повлияет на производительность в этой ситуации?
Обновление: похоже, что только запись в этот буфер увеличилась до 1000 мс. Чтение, похоже, не влияет. За это время мы записываем в буфер около 5 МБ.
Обновление 2: Это программное обеспечение используется во многих системах, и одна из систем имеет физическое устройство, которое требует использования этого флага. В настоящее время мы работаем с этим устройством в 32-битных окнах.