.NET Runtime Optimization Service загружает процессор на 100%

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

Приложения, написанные на .NET, представляют собой некий кросс-платформенный код. В процессе запуска и выполнения такие приложения вышеуказанной службой на лету перегоняются в нативный код Windows. Процесс перевода называется JIT-компиляцией (Just-In-Time).

С точки зрения разработчика подобный подход имеет больше плюсов, чем минусов. Но для рядового пользователя JIT несет за собой непростительные снижения производительности системы. Для снижения потерь используется пре-компиляция, суть которой в досрочной компиляции всех .NET приложений в нативный код и их кэширование для дальнейшего использования. Именно .NET Runtime Optimization Service и занимается процессами pre-JIT. Именно поэтому наблюдаются тормоза после свежей установки или обновления .NET.

Для того, чтобы ускорить процесс, можно запустить вручную весь pre-JIT на время рабочего перекура или обеда. Для этого необходимо:

  1. Найти папку, откуда стартует служба (например, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)
  2. Выполнить из папки команду ngen.exe executequeueditems
  3. Покурить или выпить чай во время выполнения команды (время выполнения зависит от производительности компьютера)
  4. Попробовать выполнить команду повторно и получить сообщение All compilation targets are up to date
  5. Радоваться заметному ускорению работы системы

Ссылки: