Как убить mscorsvw.exe

mscorsvw.exe(оптимизация a.NET, которая прекомпилирует сборки) занимает значительную часть моего процессора - 50-100%.

В этой статье (и многом другом) говорится, что

ngen.exe executequeueditems

Из командной строки следует убить его. Для меня эта команда просто зависает. Есть ли лучший способ убить этот процесс?

Я не пробовал перезагружаться. В последние несколько дней я видел, как мой процессор загружается больше, чем один раз, и я подозреваю, что это была моя проблема; Я хотел бы знать, как убить его в будущем.

Ответ 1

Попробуйте

ngen queue status

Надеюсь, это больше, чем просто "Я запущен" и показывает, что он пытается скомпилировать. Команда ngen queue stop остановит службу.

Эта служба запускается, когда установщик развернул сборку и попросил службу предварительно скомпилировать ее с помощью ngen install. Очевидно, что у вас плохой на вашем компьютере, я бы предположил, что он снова и снова пытается скомпилировать сборку. Проверьте журнал событий Windows, чтобы узнать об этом. Удалите программу, которая сделала это.

Ответ 2

В этой статье (и многом другом) говорится, что

ngen.exe executequeueditems

Из командной строки следует убить его. Для меня эта команда просто зависает. Есть ли лучший способ убить этот процесс?

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

Обратите внимание, что новые задания компиляции были добавлены (скорее всего) из недавнего обновления (вероятно, вы установили пакет обновления). Windows делает вам пользу от AOT-компиляции всех управляемых сборок с использованием компилятора .NET JIT, который знает все о вашем конкретном аппаратном и процессорном типах, чтобы он выдавал наиболее оптимизированный код. Таким образом,.NET гарантирует, что программное обеспечение будет работать быстрее в будущем, за счет компиляции ваших сборок сейчас

Из многих ресурсов, которые вы косвенно связаны с вашим, читайте это, например:

Ответ 3

.NET, на мой взгляд, имеет некоторый сомнительный дизайн, когда компилятору Just In Time требуется пропустить все, чтобы скомпилировать его до It Time.

Как правило, работают два демона mscorsvw, один для 64-разрядных и один для 32-разрядных (они синхронизируются друг с другом). 100% загрузка процессора - это то, что вы ожидаете от компилятора, но оно выполняется с низким приоритетом, и одновременно необходимо привязывать не более одного ядра. Одним из преимуществ многоядерных процессоров является то, что такие вещи все еще оставляют вам ядро ​​для управления взаимодействием с пользовательским интерфейсом. (Обратите внимание, что поисковый указатель - еще один демон того же общего вида, разработанный по тем же самым строкам.) Если у вас одноядерный процессор, вы действительно заметите добавленную нагрузку.

Ответ 5

У меня была такая же проблема после установки SQL 2012. После запуска команды ngen queue status, я увидел, что это был процесс оптимизации CLR, который выполнялся. Снова используя этот поток, я смог увидеть, что есть две службы Microsoft.NET Framework NGEN v4.0.30319_X64 и Microsoft.NET Framework NGEN v4.0.30319_X64, указывающие 32-битный и 64-разрядный код оптимизации.

Я видел, что эти две были запущены, а версия x86 была виновницей. Я остановил службу, и процессор вернулся с 100% до 0%, а память уменьшилась примерно на 2 ГБ.

Ответ 6

Посмотрите,.NET убивает одноядерные медиацентры. Старые компьютеры замедляют часами, веб-видео становится неуправляемо прерывистым. Так много для энергоэффективности - должен ли я оставлять ПК, компилирующий 24/7, время от времени попадаться? Процессы, ориентированные на пользователя, не имеют приоритета. Лучше всего он не отступит для автоматического обновления... в том числе .NET! Который побуждает другую перекомпилировать все ресурсы, никогда не заканчивать до патча во вторник. Я не нашел предложенные обходные пути ( "ngen.exe install/queue" или "ngen.exe update" - найти ngen в соответствующем каталоге фреймворка). Так. Я отключу службу Microsoft.NET Framework NGEN в services.msc - или через командную строку ('sc config clr_optimization_v4.xxxx start = disabled', где xxxx - номер версии, получить номер версии через запрос sc или имя каталога или services.msc); "stop" просто перезапускается в считанные секунды. Рассмотрите или попробуйте полностью удалить .NET 4.