вторник, 9 июня 2009 г.

Зачем нужна .NET Runtime Optimization Service v2.0.50727_X86, и как извлечь из неё пользу

Службы, содержащие в названии подстроку .NET и запущенные всё время, обычно вызывают большое желание отключить их. Так было и с .NET Runtime Optimization Service v2.0.50727_X86, съедающей несколько казённых мегабайт. Хотя я как будто бы специально не использую .NET, она всё-таки нужна.

Как известно, традиционное приложение на .NET не является Windows-приложением. Оно содержит некий кросс-платформенный код, который на конкретной машине Windows преобразуется в native code для Windows. Это называется just-in-time, или JIT-компиляцией. Процессор выполняет native code.

В этой схеме есть огромные плюсы для девелопера, но для рутинной юзерской работы чистый JIT был бы кошмаром. Поэтому против JIT создали естественное противоядие: пре-компиляция, pre-JIT. Служба .NET Runtime Optimization Service в фоновом режиме компилирует все имеющиеся сборки .NET в "родной" код Windows и складывает их в некий кэш. И в дальнейшем, при обновлении частей кода .NET, по необходимости повторяет пре-компиляцию. Вот в чём разгадка долгих тормозов компьютера с недавно установленным или обновлённым .NET!

Что же здесь можно сделать полезного?

Вполне естественно желание перенести все эти тормоза с рабочего времени на время обеда. И оно осуществимо! Мы можем вручную выполнить весь pre-JIT, ожидающий своей очереди, чтобы впоследствии избежать всех возможных тормозов.

Смотрим, откуда запускается эта служба. У меня, например, из папки:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Из этой папки выполняем команду ngen.exe executequeueditems. У меня она выполнялась, наверно, полчаса. После этого запустим её ещё раз и порадуемся сообщению: All compilation targets are up to date.

См. также статью в David Notario's WebLog.

2 комментария:

  1. Бесценная заметка. Net framework 4 на XP SP3 приводит к страшному торможению в первые минуты запуска системы. Смешно, что никто в интернете не знает что делать. Советуют отключить службу Microsoft .NET Framework NGEN v4.0.30319_X86. Кто-то предлагает какие-то неофициальные «исправления». Долго отказывался от использования Net framework 4 . Выполнил это (только с Net framework 4). Проблема ушла.

    ОтветитьУдалить
  2. Скромно присоединяюсь к Ivladislaw-у - заметка автора вылечила мою давнюю головную боль с Framework 4 vs XP sp3. Дмитрий, спасибо огромное, здоровья и удачи Вам!

    ОтветитьУдалить