Как измерить эффект правильного перебазирования сборок.NET перед NGen?
Наше приложение имеет много сборок.NET, которые до сих пор не были развернуты с NGen-скриптами, поэтому они всегда JITted во время выполнения.
Поскольку наше приложение обычно развертывается на терминальном сервере, получение Windows для совместного использования двоичных образов кода, вероятно, является более оптимальным, чем текущий способ, поэтому я смотрю на установку базовых адресов и сборку NGen'а.
Поэтому я запустил программу без NGen и использовал [listdlls из SysInternals][1], чтобы найти размер каждого, который я затем увеличил до следующего класса размера (т. Е. Xxxx -> 10000). Затем я выложил список памяти для всех наших сборок и скорректировал базовые адреса их всех.
Пока все хорошо, с listdlls
Теперь я вижу, что ни одна из наших сборок не была перебазирована во время выполнения.
Тем не менее, как я могу измерить, сколько памяти фактически распределяется между двумя экземплярами? В основном, скажем, я запускаю два экземпляра программы, не выполнив NGEN на сборках, а затем, выполнив NGEN, сделаю это снова.
На какие цифры я должен смотреть и из какого инструмента, чтобы найти реальный эффект, если таковой имеется?
Например, я осознаю тот факт, что сам акт перебазирования наших сборок может переместить сторонние сборки, которые мы используем (например, компоненты DevExpress), так что они внезапно должны перезагружаться, и тогда все это будет промывкой.
Итак, откуда я читаю какие цифры? Мол, я использую рабочий набор диспетчера задач? Частная память? размер коммита? свободная память до и после?
Любой совет?
2 ответа
Единственным значимым значением для вас будут частные байты процесса, которые представляют собой количество выделенных байтов (независимо от того, где), которые не могут быть разделены между процессами.
Я не могу найти источник, но уже сейчас.Net также может делиться (некоторыми) сборками, не будучи ngend.
Редактировать: Мне также было бы интересно узнать о ваших изменениях личных байтов с и без ngening.
На самом деле, больше не нужно перезагружать Windows Vista или более позднюю версию. Смотрите мой ответ на другой пост, который ссылается на этот блог Microsoft. В блоге объясняется, что "с ASLR, хотя конечное местоположение является случайным для каждой машины, оно одинаково для каждого процесса на машине, что означает, что перемещенные данные могут быть общими для всех процессов".
Весь процесс перебазирования немного нелепый, так что это хорошие новости!