¿Evitar que .NET Runtime Optimization Service se ejecute con batería?


10

Cuando abrí mi computadora portátil esta mañana, se había reiniciado sola (después de instalar las actualizaciones). Ahora, el .NET Runtime Optimization Service (ngen?) Está utilizando bastante CPU mientras la computadora funciona con batería. Me pregunto, ¿hay alguna forma de pedirle a Windows que difiera estas tareas hasta que la computadora portátil esté enchufada? Tenía la computadora portátil conectada durante la noche, pero el 30% de mi batería se ha agotado después de menos de una hora de uso, lo cual no es la situación habitual.

Mi computadora no estaba inactiva mientras hacía esto, así que supongo que está compilando ensamblados de alta prioridad después de una actualización de .Net Framework de este artículo .

Revisé el historial de actualizaciones de Windows y había instalado una actualización acumulativa durante la noche mientras estaba enchufado. ( Https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Deseo que Windows ejecute la optimización .net como parte de ese proceso en lugar de esperar a que comience a usar la computadora portátil con batería.

Administrador de tareas


Acabo de ver el mismo servicio de repente comiendo mucha CPU y el ventilador se volvió ruidoso. Pero en mi caso fue después de que puse la computadora a dormir después de 2 horas de usarla. No pude detener el servicio (ya sea en la ventana que publicó arriba nore en la vista de detalles). Después de 5-10 minutos, todo terminó, así que supongo que es solo cuestión de esperar unos minutos
hansaplast

Respuestas:


4

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:

  1. 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).

  2. 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.


Si dejo mi máquina inactiva (bueno, en realidad una VM Virtualbox) durante unos minutos, entonces ngen.exe comienza a consumir toda la CPU. Sin embargo, si ejecuto alguno o todos los comandos anteriores en una ventana de cmd de administrador, rápidamente vuelvo "Todos los objetivos de compilación están actualizados". :-( [Oh, tal vez debería haber mencionado que esta es una máquina de desarrollo. Me pregunto si un proceso de Visual Studio está causando problemas ...]
mwardm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.