Как измерить эффект правильного перебазирования сборок .NET перед NGen? - PullRequest
4 голосов
/ 22 апреля 2010

Наше приложение имеет множество сборок .NET, которые до сих пор не были развернуты с NGen-скриптами, поэтому они всегда JITted во время выполнения.

Поскольку наше приложение обычно разворачивается на сервере терминалов, получение Windows для совместного использования двоичных образов кода, вероятно, является более оптимальным, чем текущий способ, поэтому я смотрю на настройку базовых адресов и сборку NG для сборок.

Итак, я запустил программу без NGen и использовал [listdlls из SysInternals] [1], чтобы найти размер каждого, который я затем увеличил до следующего класса размера (то есть. Xxxx -> 10000). Затем я выложил список памяти для всех наших сборок и скорректировал базовые адреса их всех.

Пока все хорошо, с listdlls Теперь я вижу, что ни одна из наших сборок не перебазируется во время выполнения.

Однако, как я могу измерить, сколько памяти фактически распределяется между двумя экземплярами? В основном, скажем, я запускаю два экземпляра программы, не выполнив NGEN на сборках, а затем, выполнив NGEN, сделаю это снова.

На какие цифры мне смотреть и из какого инструмента найти фактический эффект, если таковой имеется?

Например, я знаю о том факте, что сам процесс перебазирования наших сборок может привести к смещению сторонних сборок, которые мы используем (например, компонентов DevExpress), так что они внезапно должны перезагружаться, и тогда все это будет стиркой *. * 1014

Итак, откуда я читаю какие цифры? Мол, я использую рабочий набор диспетчера задач? Частная память? размер коммита? свободная память до и после?

Любой совет?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2010

Единственным значимым значением для вас будут личные байты процесса, которые представляют собой количество выделенных байтов (независимо от того, где), которые не могут быть разделены между процессами.

Я не могу найти источник, но в воздухетекущий .Net также может обмениваться (некоторыми) сборками, не будучи ngend.

Редактировать: Мне также были бы интересны ваши выводы об изменении личных байтов с и без ngening.

1 голос
/ 11 апреля 2012

На самом деле, больше нет необходимости перезагружаться в Vista или позже. См. мой ответ на другой пост , который ссылается на этот блог Microsoft . В блоге объясняется, что «с ASLR, хотя конечное местоположение является случайным для каждой машины, оно одинаково для каждого процесса на машине, что означает, что перемещенные данные могут быть общими для всех процессов».

Весь процесс перебазирования немного обманчив, так что это отрадные новости!

...