Короткий ответ - нет, вы не можете надежно отложить ngen (и вы не должны пытаться), единственная найденная / полезная опция, которую я нашел, состояла в том, чтобы заставить его работать до конца и не оставлять его скрытым в фоновом режиме.
Если вы пытаетесь сэкономить некоторые циклы ЦП на батарее (или в моем случае не позволить серверу запустить ngen после возврата его в эксплуатацию после обновлений Windows), лучше всего заставить ngen работать самостоятельно. Для настольного ПК на ум приходят 2 варианта:
Создайте файл .bat или .ps1 на рабочем столе с помощью соответствующей команды ngen ниже - просто дважды щелкните и дождитесь закрытия ngen, прежде чем отключить его. Если вместо этого вы создадите сценарий в папке Windows и добавите к нему ярлык на рабочем столе, вы также можете использовать командную строку или подсказку Powershell или диалоговое окно «Выполнить», чтобы выполнить его по мере необходимости (перед отключением / после обновления).
Другой вариант, который должен работать, - использовать запланированное задание для выполнения вышеуказанного сценария. Запустите его при запуске, не входя в систему как администратор. Если на вашем ноутбуке разрешено устанавливать обновления в течение ночи и он может перезагрузиться, это должно работать хорошо.
Чтобы запустить 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 выполняется быстрее, чем запуск в фоновом режиме, но это больше влияет на производительность. Сколько времени это займет, зависит от вашего оборудования и от того, сколько / какие нативные образы нужно перекомпилировать.