При запуске приложения .NET 2.0 WinForms в среде служб терминалов я вижу некоторые неожиданные результаты, которые я не могу объяснить. Все, что я прочитал, указывает, что сборки JIT (т. Е. Не используя NGen для создания собственных изображений) приводят ко всему, что кодовое пространство хранится на закрытых страницах, увеличивая размер рабочего набора/давление памяти. Тем не менее, фактические результаты (проверенные с помощью Process Explorer, VMMap и WinDbg) показывают, что даже сборки JIT'ы действительно размещаются на совместно используемых страницах (и действительно разделяются, когда есть несколько экземпляров приложения, даже под отдельными TS сессии/пользователей)..NET JIT'ed сборки в разделяемых страницах
Может ли кто-нибудь объяснить, почему это может быть? Это выполняется в среде сервера W2K8, поэтому ASLR объясняет, почему отсутствие конкретных базовых адресов для каждой сборки & не вызывает проблем. Тем не менее, похоже, что эти не являются собственными изображениями PE, это должно привести к тому, что код для этих сборок хранится на личных страницах.
Это было обнаружено, когда мы начали изучать использование NGen для уменьшения давления памяти, но на самом деле обнаружили, что он увеличил размер рабочего набора - поскольку сборки JIT'а уже были разделены.
Самая последняя ссылка, которую я нашел здесь, что опять-таки отличается от наших фактических результатов:
Edit: Я хотел бы добавить, что с первого размещения на вопрос, больше экспериментов на ОС Windows Серверные тестовые окна Server 2003 также, по-видимому, демонстрируют совместную сборку JIT'ов между процессами. Я все еще в тупике, почему все советы, которые я могу найти, указывают, что NGen требуется, но все реальные данные противоречат этому. Я действительно надеюсь, что эксперты могут пролить свет.
Спасибо!
Редактировать: Я очистил все мои книги .NET/CLR и у меня заканчиваются идеи для поисковых запросов, чтобы попытаться решить эту проблему; кто собирается сделать мой день, помогая устранить это ужасное нюхательное чувство: «Я не понимаю, что происходит»!?! :)
Запрет любых убедительных доказательств того, что NGen действительно поможет использовать память (и незначительное влияние времени запуска в нашей среде), мы решили не создавать генерации собственных изображений наших сборок. Мне все равно хотелось бы знать, почему мы видим это неожиданное поведение! – allgeek