Как измерить эффект от правильного перенастройки сборок .NET до NGen?

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

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

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

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

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

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

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

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

Любой совет?


person Lasse V. Karlsen    schedule 22.04.2010    source источник
comment
Меня интересует то же самое, потому что наши клиенты намерены запускать наше приложение через службы терминалов. Я использую Process Explorer, но у меня еще недостаточно знаний, чтобы понять, что он мне говорит. Очень жаль, что никто не ответил на этот вопрос более подробно. Если эта тема людям неинтересна, то что же?   -  person J M    schedule 12.02.2011


Ответы (2)


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

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

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

person Foxfire    schedule 22.04.2010
comment
Я проголосовал за этот ответ, потому что он согласуется со всем, что я прочитал до сих пор, и я также был бы очень заинтересован в результатах операций, поскольку никто из всех экспертов на этом сайте не испытывал побуждения говорить на эту тему. - person J M; 12.02.2011

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

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

person Olly    schedule 11.04.2012