Empêcher .NET Runtime Optimization Service de fonctionner sur batterie?

10

Lorsque j'ai ouvert mon ordinateur portable ce matin, il s'était redémarré (après l'installation des mises à jour). Maintenant, le service d'optimisation d'exécution .NET (ngen?) Utilise pas mal de CPU pendant que l'ordinateur est sur batterie. Je me demande, est-il possible de demander à Windows de reporter ces tâches jusqu'à ce que l'ordinateur portable soit branché? J'ai branché l'ordinateur portable pendant la nuit, mais 30% de ma batterie a disparu après moins d'une heure d'utilisation, ce qui n'est pas la situation habituelle.

Mon ordinateur n'était pas inactif pendant qu'il faisait cela, donc je suppose que ses assemblages de haute priorité de compilation après une mise à jour .Net Framework de cet article .

J'ai vérifié l'historique des mises à jour de Windows et il avait installé une mise à jour cumulative pendant la nuit lors de la connexion. ( Https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Je souhaite que Windows exécute l'optimisation .net dans le cadre de ce processus au lieu d'attendre que je commence à utiliser l'ordinateur portable sur batterie.

Gestionnaire des tâches


la source
Je viens de voir le même service manger soudainement beaucoup de CPU et le ventilateur est devenu bruyant. Mais dans mon cas, c'était après avoir mis l'ordinateur en veille après 2 heures d'utilisation. Je n'ai pas pu arrêter le service (ni dans la fenêtre que vous avez postée plus haut dans la vue détaillée). Après 5-10 minutes, c'était fini, donc je suppose que c'est juste une question d'attendre quelques minutes
hansaplast

Réponses:

4

La réponse courte est non, vous ne pouvez pas différer de manière fiable ngen (et vous ne devriez pas essayer), la seule option cohérente / utile que j'ai trouvée le forçait à se terminer et ne le laissait pas se cacher en arrière-plan.

Si vous essayez d'économiser des cycles de processeur sur la batterie (ou dans mon cas, empêchez un serveur d'exécuter ngen après l'avoir remis en service après les mises à jour Windows), votre meilleure option est de forcer ngen à s'exécuter vous-même. Pour un PC de bureau, 2 options viennent à l'esprit:

  1. Créez un fichier .bat ou .ps1 sur votre bureau avec la commande ngen appropriée ci-dessous - il suffit de double-cliquer et d'attendre la fermeture de ngen avant de débrancher. Si vous créez le script dans votre dossier Windows à la place et que vous y accédez sur votre bureau, vous pouvez également utiliser la commande ou l'invite Powershell ou la boîte de dialogue Exécuter pour l'exécuter comme requis (avant de débrancher / après une mise à jour).

  2. Une autre option qui devrait fonctionner consiste à utiliser une tâche planifiée pour exécuter le script ci-dessus. Exécutez-le au démarrage, sans utilisateur connecté, en tant qu'administrateur. Si votre ordinateur portable est autorisé à installer des mises à jour pendant la nuit et peut redémarrer, cela devrait fonctionner correctement.

Pour exécuter ngen, vous n'avez besoin que d'une des commandes suivantes, utilisez la première option / la plus appropriée pour votre système:

  • .Net 4 ou mieux sur 64 bits C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 4 ou mieux sur 32 bits C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 3 ou moins sur 64 bits C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • .Net 3 ou moins sur 32 bits C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

Vous trouverez ci-dessous la sortie minimale que vous obtenez de ngen lorsqu'il n'y a aucun élément en file d'attente:

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.

Lorsque ngen.exe est exécuté avec, executeQueuedItemsil le forcera à exécuter toutes les tâches en attente aussi rapidement que possible. Normalement, ngen s'exécute sur un thread d'arrière-plan de faible priorité (et commence apparemment juste au hasard), l'idée étant qu'il ne devrait pas affamer d'autres processus de CPU - bien que cela ne fonctionne pas toujours. L'exécution interactive de ngen est plus rapide que de le laisser s'exécuter en arrière-plan, mais cela affectera davantage les performances. Le temps nécessaire dépend de votre matériel et du nombre / des images natives à recompiler.

MisterSmith
la source
Si je laisse ma machine inactive (enfin, en fait une machine virtuelle Virtualbox) pendant quelques minutes, ngen.exe commence à manger tout le processeur. Cependant, si j'exécute une ou toutes les commandes ci-dessus dans une fenêtre d'administrateur cmd, je reviens rapidement "Toutes les cibles de compilation sont à jour". :-( [Oh - j'aurais peut-être dû mentionner qu'il s'agit d'une machine de développement. Je me demande si un processus Visual Studio cause des problèmes ...]
mwardm