Когда я открыл свой ноутбук этим утром, он перезагрузил себя (после установки обновлений). Теперь .NET Runtime Optimization Service (ngen?) Использует довольно много ресурсов процессора, пока компьютер работает от батареи. Мне интересно, есть ли способ попросить Windows отложить эти задачи, пока ноутбук не подключен? Я включил ноутбук на ночь, но 30% батареи разряжены менее чем через час использования, что не является обычной ситуацией.
Мой компьютер не работал, когда он делал это, поэтому я предполагаю, что он собирает высокоприоритетные сборки после обновления .Net Framework из этой статьи .
Я проверил историю обновлений Windows и установил накопительное обновление за ночь, когда был подключен. ( Https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Я бы хотел, чтобы Windows запускала оптимизацию .net как часть этого процесса, а не ждала, когда я начну использовать ноутбук от батареи.
Ответы:
Короткий ответ - нет, вы не можете надежно отложить ngen (и вы не должны пытаться), единственная найденная / полезная опция, которую я нашел, состояла в том, чтобы заставить его работать до конца и не оставлять его в тени.
Если вы пытаетесь сохранить некоторые циклы ЦП на аккумуляторе (или в моем случае не дать серверу запустить ngen после возвращения его в эксплуатацию после обновлений Windows), лучше всего заставить ngen работать самостоятельно. Для настольного ПК на ум приходят 2 варианта:
Создайте файл .bat или .ps1 на рабочем столе с помощью соответствующей команды ngen ниже - просто дважды щелкните и дождитесь закрытия ngen, прежде чем отключить его. Если вместо этого вы создадите сценарий в папке Windows и добавите к нему ярлык на рабочем столе, вы также можете использовать команду или Powershell Prompt или диалоговое окно «Выполнить», чтобы выполнить его по мере необходимости (перед отключением / после обновления).
Другой вариант, который должен работать, - использовать запланированное задание для выполнения вышеуказанного сценария. Запустите его при запуске, не входя в систему как администратор. Если на вашем ноутбуке разрешено устанавливать обновления в течение ночи и он может перезагрузиться, это должно работать хорошо.
Чтобы запустить 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, когда нет элементов в очереди:
Когда ngen.exe запускается вместе с
executeQueuedItems
ним, он заставит его выполнить все отложенные задачи как можно быстрее. Обычно ngen работает в фоновом потоке с низким приоритетом (и, очевидно, просто запускается случайным образом), идея в том, что он не должен останавливать другие процессы ЦП - хотя это не всегда работает. Интерактивный запуск ngen выполняется быстрее, чем запуск в фоновом режиме, но это больше влияет на производительность. Сколько времени это займет, зависит от вашего оборудования и от того, сколько / какие нативные образы нужно перекомпилировать.источник