15.11.2006, 16:28
общий
это ответ
Здравствуйте, Другов-Кручинский Владимир Валерьевич!
.NET Runtime Optimization Service (процесс "mscorsvw.exe") предназначен для осуществления pre-JIT компиляции сборок .NET в фоновом режиме.
<b>Что это означает:</b>
Непосредственно во время запуска приложения .NET сборка .NET преобразуется JIT (just-in-time) компилятором в исполняемый код для конкретного компьютера(т.н. native code). Этот код временный, он создается и хранится в адресном пространстве процесса, которое очищается(условно) при завершении процесса. Поэтому при следующем запуске процесса все повторится сначала.
Для борьбы с данной "проблемой" используется пре-компиляция (pre-JIT), т.е. создание native кода не во время запуска процесса, а заблаговременно. При pre-JIT компиляции сборки .NET компилируются в "обычные" Win32 PE файлы-образы(т.н. "ngen images") и помещаются в Кеш Сборок (Assembly Cache).
Недостатком таких скомпилированных образов является то, что при изменении runtime или других библиотек на которые они ссылаются эти образы становятся нерабочими.
В связи с этим в .NET Framework 2.0 была реализована служба .NET Runtime Optimization Service (или NGEN Service) которая следит за зависимостями сборок и автоматически осуществляет pre-JIT компиляцию при необходимости.
<b>Как служба работает:</b>
Существует два способа запуска службы:
1. Сообщить службе, что были произведены изменения, которые могут потребовать рекомпиляцию (ngen.exe update). При этом служба запускается, определяет - что должно быть скомпилировано и помещает эти задачи в очередь.
2. Добавить в очередь новую задачу (ngen.exe install /queue).
Задачи в очереди компиляции могут иметь различные уровни приоритета. Задачи с высоким приоритетом выполняются немедленно. Задачи с низким приоритетом выполняются при простое компьютера.
Если хотите выполнить всю очередь сразу, чтобы процесс не занимал память, нужно выполнить команду:
ngen.exe executequeueditems
<b>Когда в очереди не остается задач служба автоматически устанавливает тип запуска "Manual" и останавливается до следующего пробуждения (см. выше).</b>