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