В нашем приложении много сборок .NET, которые до сих пор не были развернуты с помощью NGen-скриптов, поэтому они всегда JITted во время выполнения.
Поскольку наше приложение обычно развертывается на сервере терминалов, заставить Windows делиться двоичными образами кода, вероятно, более оптимально, чем текущий способ, поэтому я ищу установку базовых адресов и NGen'ning сборок.
Поэтому я запустил программу вообще без NGen и использовал [listdlls из SysInternals] [1], чтобы найти размер каждой, который затем увеличил до следующего класса размера (например, xxxx -> 10000). Затем я выложил список памяти для всех наших сборок и скорректировал их базовые адреса.
Пока все хорошо, listdlls
теперь я вижу, что ни одна из наших сборок не перебазируется во время выполнения.
Однако как я могу измерить, сколько памяти фактически распределяется между двумя экземплярами? По сути, скажем, я запускаю два экземпляра программы, не выполнив NGEN для сборок, а затем, выполнив NGEN, делаю это снова.
На какие цифры мне следует смотреть и с помощью какого инструмента, чтобы определить фактический эффект, если таковой имеется?
Например, мне известно о том, что сам процесс перебазирования наших сборок может перемещать сторонние сборки, которые мы используем (например, компоненты DevExpress), так что они внезапно должны быть перекомпонованы, и тогда все это становится промывкой.
Итак, откуда мне читать какие числа? Мол, воспользуюсь рабочим набором диспетчера задач? Частная память? размер фиксации? свободная память до и после?
Любой совет?