web-dev-qa-db-fra.com

Empêcher le service d'optimisation d'exécution .NET de fonctionner sur batterie?

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 du runtime .NET (ngen?) Utilise pas mal de ressources processeur lorsque l'ordinateur est sur batterie. Je me demande s'il existe un moyen de demander à Windows de reporter ces tâches jusqu'à ce que l'ordinateur portable soit branché. J'ai eu l'ordinateur portable branché pendant la nuit mais 30% de ma batterie est épuisée après moins d'une heure d'utilisation, ce qui n'est pas la situation habituelle.

Mon ordinateur n'était pas inactif pendant cette opération. Je suppose donc qu'il compile ses assemblys de haute priorité après une mise à jour .Net Framework à partir 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 alors qu'il était branché. ( https://support.Microsoft.com/en-ie/help/4038788/windows-10 -update-kb4038788 ). J'aimerais 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.

Task Manager

8
user114447

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 était de le forcer à s’achever et de ne pas le laisser traîner en arrière-plan.

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

  1. Créez un fichier .bat ou .ps1 sur votre bureau à l'aide de la commande ngen appropriée ci-dessous: il vous suffit de double-cliquer et d'attendre la fermeture de ngen avant de le débrancher. Si vous créez plutôt le script dans votre dossier Windows et que vous le raccourcissez sur votre bureau, vous pouvez également utiliser Command ou Powershell Prompt ou la boîte de dialogue Exécuter pour l'exécuter selon les besoins (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 du jour au lendemain 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 32bit 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 le rendement minimal que vous obtenez de ngen lorsqu'il n'y a pas d'éléments 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 executeQueuedItems, il sera forcé d'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, apparemment, commence au hasard), l’idée étant qu’il ne faut pas affamer les autres processus de la CPU, bien que cela ne fonctionne pas toujours. L'exécution interactive de ngen est plus rapide que de la laisser s'exécuter en arrière-plan, mais les performances s'en ressentent davantage. Le temps que cela prend dépend de votre matériel et du nombre/quelles images natives nécessitent une recompilation.

1
MisterSmith