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