Предотвратить запуск службы .NET Runtime Optimization от батареи?

10

Когда я открыл свой ноутбук этим утром, он перезагрузил себя (после установки обновлений). Теперь .NET Runtime Optimization Service (ngen?) Использует довольно много ресурсов процессора, пока компьютер работает от батареи. Мне интересно, есть ли способ попросить Windows отложить эти задачи, пока ноутбук не подключен? Я включил ноутбук на ночь, но 30% батареи разряжены менее чем через час использования, что не является обычной ситуацией.

Мой компьютер не работал, когда он делал это, поэтому я предполагаю, что он собирает высокоприоритетные сборки после обновления .Net Framework из этой статьи .

Я проверил историю обновлений Windows и установил накопительное обновление за ночь, когда был подключен. ( Https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Я бы хотел, чтобы Windows запускала оптимизацию .net как часть этого процесса, а не ждала, когда я начну использовать ноутбук от батареи.

Диспетчер задач


источник
Я только что увидел, что тот же сервис внезапно съел много процессора, и вентилятор стал громким. Но в моем случае это было после того, как я перевел компьютер в спящий режим после 2 часов его использования. Я не мог остановить службу (либо в окне, которое вы разместили выше, ни в подробном представлении). Через 5-10 минут все было кончено, так что я думаю, это всего лишь вопрос ожидания нескольких минут
hansaplast

Ответы:

4

Короткий ответ - нет, вы не можете надежно отложить ngen (и вы не должны пытаться), единственная найденная / полезная опция, которую я нашел, состояла в том, чтобы заставить его работать до конца и не оставлять его в тени.

Если вы пытаетесь сохранить некоторые циклы ЦП на аккумуляторе (или в моем случае не дать серверу запустить ngen после возвращения его в эксплуатацию после обновлений Windows), лучше всего заставить ngen работать самостоятельно. Для настольного ПК на ум приходят 2 варианта:

  1. Создайте файл .bat или .ps1 на рабочем столе с помощью соответствующей команды ngen ниже - просто дважды щелкните и дождитесь закрытия ngen, прежде чем отключить его. Если вместо этого вы создадите сценарий в папке Windows и добавите к нему ярлык на рабочем столе, вы также можете использовать команду или Powershell Prompt или диалоговое окно «Выполнить», чтобы выполнить его по мере необходимости (перед отключением / после обновления).

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

Чтобы запустить ngen, вам нужна только одна из следующих команд, используйте первый / наиболее подходящий вариант для вашей системы:

  • .Net 4 или лучше на 64-битной C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 4 или лучше на 32-битной C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 3 или менее на 64-битной C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • .Net 3 или менее на 32-битной C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

Ниже приведен минимальный результат, который вы получаете от ngen, когда нет элементов в очереди:

PS C:\Users\Administrator> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems
Microsoft (R) CLR Native Image Generator - Version 4.6.1586.0
Copyright (c) Microsoft Corporation.  All rights reserved.
All compilation targets are up to date.

Когда ngen.exe запускается вместе с executeQueuedItemsним, он заставит его выполнить все отложенные задачи как можно быстрее. Обычно ngen работает в фоновом потоке с низким приоритетом (и, очевидно, просто запускается случайным образом), идея в том, что он не должен останавливать другие процессы ЦП - хотя это не всегда работает. Интерактивный запуск ngen выполняется быстрее, чем запуск в фоновом режиме, но это больше влияет на производительность. Сколько времени это займет, зависит от вашего оборудования и от того, сколько / какие нативные образы нужно перекомпилировать.

MisterSmith
источник
Если я оставляю свою машину без дела (ну, фактически, виртуальную машину Virtualbox) на несколько минут, тогда ngen.exe начинает пожирать весь процессор. Однако, если я выполню любую или все вышеперечисленные команды в окне cmd администратора, я быстро вернусь: «Все цели компиляции обновлены». :-( [О, может быть, я должен был упомянуть, что это машина для разработки. Интересно, вызывает ли процесс Visual Studio проблемы ...]
mwardm