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.
Réponses:
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:
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).
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:
Lorsque ngen.exe est exécuté avec,
executeQueuedItems
il 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.la source