La respuesta corta es no, no puede diferir confiablemente ngen (y no debe intentarlo), la única opción consistente / útil que encontré fue forzarlo a ejecutarse hasta su finalización y no dejarlo al acecho en el fondo.
Si está intentando guardar algunos ciclos de CPU en la batería (o en mi caso impide que un servidor ejecute ngen después de devolverlo al servicio después de las actualizaciones de Windows), su mejor opción es forzar que ngen se ejecute usted mismo. Para una PC de escritorio, se me ocurren 2 opciones:
Cree un archivo .bat o .ps1 en su escritorio con el comando ngen apropiado a continuación: simplemente haga doble clic y espere a que ngen se cierre antes de desenchufarlo. Si crea el script en su carpeta de Windows en su lugar y abre un acceso directo a él en su escritorio, también puede usar Command o Powershell Prompt o el cuadro de diálogo Ejecutar para ejecutarlo según sea necesario (antes de desconectar / después de una actualización).
Otra opción que debería funcionar es utilizar una tarea programada para ejecutar el script anterior. Ejecútelo al inicio, sin un usuario conectado, como administrador. Si su computadora portátil puede instalar actualizaciones durante la noche y puede reiniciarse, esto debería funcionar bien.
Para ejecutar ngen solo necesita uno de los siguientes comandos, use la primera / más apropiada opción para su sistema:
.Net 4 o mejor en 64 bits
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems
.Net 4 o mejor en 32 bits
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems
.Net 3 o menos en 64 bits
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems
.Net 3 o menos en 32 bits
C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems
A continuación se muestra el resultado mínimo que obtiene de ngen cuando no hay elementos en cola:
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.
Cuando se ejecuta ngen.exe executeQueuedItems
, lo obligará a realizar todas las tareas pendientes lo más rápido posible. Normalmente, ngen se ejecuta en un subproceso de fondo de baja prioridad (y aparentemente solo comienza al azar), la idea es que no debería privar a otros procesos de la CPU, aunque eso no siempre funciona. Ejecutar ngen de forma interactiva es más rápido que dejarlo ejecutándose en segundo plano, pero afectará más el rendimiento. El tiempo que tarde dependerá de su hardware y cuántas / qué imágenes nativas necesitan recompilarse.