Почему процесс mscorsvw.exe в ОС Windows 8/8.1, сильно загружает процессор и как его можно ускорить?

Данный совет, применим для ОС Windows 8/8.1. Актуальность (применимость/эффективность) для ОС Windows XP/Vista/7/10, не гарантируется.
 
Если вы, перешли на ОС Windows 8/8.1, то наверное замечали, что время от времени, ваш компьютер начинает сильно снижать свою производительность и виной этому процесс (или даже несколько процессов) mscorsvw.exe, который используется службой NET Runtime Optimization Service. Но не все знают, для чего предназначена эта служба и каким образом можно ускорить ее работу. Чтобы устранить эту пробелу, предлагаю вашему вниманию руководство, созданное на основе материалов инженерной команды NET.

Подготовлено по материалам:
Wondering why mscorsvw.exe has high CPU usage? You can speed it up.
Got a need for speed? .NET apps start faster.
Why mscorsvw.exe strongly loads the processor and how it can be accelerated?

Для чего нужен и как работает .NET Framework?

.NET Framework – программная платформа от компании Microsoft, которая позволяет разработчикам создавать приложения, не привязываясь к аппаратным особенностям платформы и версиям ОС. Написанное с помощью .NET Framework приложение, будет одинаково работать в любой системе, где установлена данная платформа. Такой подход, позволяет значительно облегчить разработку и устранить возможные конфликты версий библиотек, так как наличие необходимой версии платформы, автоматически подразумевает наличие необходимых компонентов и их не требуется включать в поставку программы. В настоящий момент .NET Framework, выпускается как свободное ПО под лицензией MIT.

Для написания программного кода может быть использовать один из поддерживаемых платформой языков программирования, который затем компилируется в промежуточный байт-код CIL (Common Intermediate Language) и исполняется виртуальной машиной платформы CLR (Common Language Runtime). Использование виртуальной машины позволяет исполнять один и тот же код на системах с различными версиями аппаратной и программной платформы.

Проще говоря, он будет одинаково эффективно работать и на одноядерном стареньком Pentium 4 c 32-битной системой, и на многоядерном Core i7 в современной 64-битной среде. При этом, разработчику не нужно вникать в тонкости работы платформы, это задача разработчиков .NET Framework.

Как можно ускорить запуск и работу .NET Framework приложений?

Несмотря на то, что современные процессоры уже давно позволяют эффективно использовать JIT-компиляцию (just in time, компиляция "на лету"), несложно заметить, что компилятор CLR будет выполнять много повторяющихся действий, каждый раз компилируя в машинный код используемой платформы CIL-код общих библиотек и компонентов. Этого можно избежать, если выполнить компиляцию один раз и разместить готовый машинный код в кэше.

Для выполнения этой задачи предназначен механизм NGEN (The Native Image Generator) - генератор образов в машинном коде. Чтобы NGEN мог выполнять свою задачу в фоновом режиме предназначена служба .NET Runtime Optimization Service (mscorsvw.exe), которая запускается каждый раз после того, как набор библиотек .NET Framework был изменен.

Когда это происходит? Прежде всего после установки данной платформы, но это довольно редкий сценарий, тем более что .NET Framework уже входит в состав современных версий Windows. Однако, обновления для .NET Framework выпускаются достаточно регулярно, что заставляет mscorsvw.exe выполнять перекомпиляцию библиотек платформы.

Как поясняют сотрудники инженерной команды NET, система обновлений Windows Update, через которую получает обновления и .NET Framework, настроена по-умолчанию таким образом, чтобы производить обновление системы в ночное время, когда компьютер не используется пользователем. Но иногда это сделать невозможно, например, если компьютер выключен, поэтому процесс обновления может начаться и посреди дня, в этот момент вы можете заметить снижение производительности системы, так как основные ресурсы будут заняты mscorsvw.exe.

В Windows 8 на смену NGEN пришел более совершенный механизм AutoNGEN. Теперь компилируются только те библиотеки, которые фактически используются на ПК, и данная работа производится только в период простоя, при необходимости служба способна остановить свою работу в течении 2 секунд. Начиная с Windows 8.1 ряд важных библиотек .NET Framework уже имеют готовые образы в машинном коде для большинства актуальных платформ и могут быть получены через Windows Update, что позволяет отказаться от их компиляции на клиентских ПК.

Как заставить mscorsvw.exe работать быстрее?

Начавшийся в разгар рабочего дня ресурсоемкий процесс оптимизации .NET Framework конечно же неприятен и, чаще всего, пользователи, не разбираясь в причинах происходящего, завершают работу mscorsvw.exe или идут еще дальше и отключают службу. Однако, делать этого не стоит, так как .NET Runtime Optimization Service выполняет важную задачу и поможет вашим приложениям работать эффективнее. В тоже время есть способ выполнить эту работу быстрее, по умолчанию служба использует только одно процессорное ядро, если разрешить ей использовать большее количество ядер (в настоящее время не более 6), то оптимизация будет выполнена за меньшее количество времени, и вы снова сможете вернуться к своей работе.

Для запуска NGEN без ограничения на количество используемых ядер инженерная команда NET подготовила специальный скрипт:

Сценарий WSH

Вам нужно будет запустить его из командной строки с правами администратора. Данный скрипт успешно работает в системах до Windows 7 / Server 2008R2 включительно. При его запуске в среде Windows 8.1 можно столкнуться с ошибками, поэтому, для Windows 8 / Server 2012 следует использовать сценарий PowerShell (также, никто не мешает его использовать и в среде ОС Windows 7):

Сценарий PowerShell

Так как PowerShell, к сожалению, еще недостаточно знаком многим системным администраторам, остановимся на запуске сценария более подробно. Если вы, просто попытаетесь его выполнить, то скорее всего, получите ошибку.

По умолчанию, выполнение сценариев PowerShell запрещено даже Администратору, что в общем-то правильно с точки зрения безопасности. Чтобы узнать текущие разрешения, запустите среду исполнения PowerShell с правами администратора и выполните команду:

Get-ExecutionPolicy -list

В ответ вы получите политики для различных уровней: текущего сеанса, текущего пользователя или компьютера.

По-умолчанию, политики не заданы: Undefined, что соответствует уровню Restricted, который разрешает запуск любых команд, но запрещает запуск скриптов. Для выполнения сценария, вам нужно установить один из режимов разрешающий выполнение скриптов: Unrestricted или Bypass. В целях безопасности, такой режим, следует устанавливать только для текущего сеанса, т.е. на уровне Process. Для этого, выполните команду:

Set-ExecutionPolicy Bypass -Scope Process

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

Что именно делает данный сценарий и можно ли обойтись без него?

Данные скрипты были подготовлены для тех, кто не хочет иметь дело с командной строкой, если же вы, предпочитаете делать все самостоятельно, то можете выполнить несколько команд вручную:

.NET Framework 4 в Windows 7 и более ранних версиях:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

В 64-битных системах также выполните:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

.NET Framework 4 в Windows 8 / 8.1:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

schTasks /run /Tn "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319"

В 64-битных системах также выполните:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

schTasks /run /Tn "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64"

Если Вы, используете .NET 2.0 или 3.5, то команды будут следующими:

c:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

В 64-битных системах также выполните:

c:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

Эти команды, должны быть выполнены в командной строке работающей с правами администратора, в противном случае, вы получите ошибку выполнения.

Отправить комментарий

Новые Старые