Verhindern, dass der .NET Runtime Optimization Service im Akkubetrieb ausgeführt wird?

10

Als ich heute Morgen meinen Laptop öffnete, hatte er sich selbst neu gestartet (nach der Installation von Updates). Jetzt verbraucht der .NET Runtime Optimization Service (ngen?) Einiges an CPU, während der Computer im Akkubetrieb ist. Ich frage mich, gibt es eine Möglichkeit, Windows zu bitten, diese Aufgaben zu verschieben, bis der Laptop angeschlossen ist? Ich hatte den Laptop über Nacht angeschlossen, aber 30% meines Akkus sind nach weniger als einer Stunde Gebrauch leer, was nicht die übliche Situation ist.

Mein Computer war währenddessen nicht inaktiv, daher gehe ich davon aus, dass er Assemblys mit hoher Priorität nach einem .NET Framework-Update aus diesem Artikel kompiliert .

Ich habe den Windows-Update-Verlauf überprüft und über Nacht ein kumulatives Update installiert, während es angeschlossen war ( https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Ich wünschte, Windows würde als Teil dieses Prozesses die .net-Optimierung ausführen, anstatt darauf zu warten, dass ich den Laptop im Akkubetrieb verwende.

Taskmanager


quelle
Ich habe gerade gesehen, dass derselbe Dienst plötzlich viel CPU verbraucht hat und der Lüfter laut wurde. Aber in meinem Fall war es, nachdem ich den Computer nach 2 Stunden in den Ruhezustand versetzt hatte. Ich konnte den Dienst nicht beenden (auch nicht in dem Fenster, das Sie oben oder in der Detailansicht gepostet haben). Nach 5-10 Minuten war es vorbei, also denke ich, es ist nur eine Frage des Wartens ein paar Minuten
Hansaplast

Antworten:

4

Die kurze Antwort lautet: Nein, Sie können ngen nicht zuverlässig verschieben (und Sie sollten es nicht versuchen). Die einzige konsistente / nützliche Option, die ich gefunden habe, war, es zu zwingen, vollständig ausgeführt zu werden, und es nicht im Hintergrund lauern zu lassen.

Wenn Sie versuchen, einige CPU-Zyklen im Akkubetrieb zu speichern (oder in meinem Fall einen Server daran hindern, ngen auszuführen, nachdem er nach Windows-Updates wieder in Betrieb genommen wurde), können Sie ngen am besten zwingen, sich selbst auszuführen. Für einen Desktop-PC stehen zwei Optionen zur Verfügung:

  1. Erstellen Sie eine .bat- oder .ps1-Datei auf Ihrem Desktop mit dem entsprechenden Befehl ngen unten - doppelklicken Sie einfach und warten Sie, bis ngen geschlossen ist, bevor Sie den Netzstecker ziehen. Wenn Sie das Skript stattdessen in Ihrem Windows-Ordner erstellen und auf Ihrem Desktop eine Verknüpfung dazu herstellen, können Sie es auch mithilfe der Befehls- oder Powershell-Eingabeaufforderung oder des Dialogfelds Ausführen nach Bedarf ausführen (bevor Sie den Stecker ziehen / nach einem Update).

  2. Eine weitere Option, die funktionieren sollte, ist die Verwendung einer geplanten Aufgabe zum Ausführen des obigen Skripts. Führen Sie es beim Start ohne angemeldeten Benutzer als Administrator aus. Wenn Ihr Laptop über Nacht Updates installieren darf und neu starten kann, sollte dies gut funktionieren.

Um ngen auszuführen, benötigen Sie nur einen der folgenden Befehle. Verwenden Sie die erste / am besten geeignete Option für Ihr System:

  • .Net 4 oder besser auf 64bit C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 4 oder besser auf 32bit C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 3 oder weniger auf 64bit C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • .Net 3 oder weniger auf 32bit C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

Nachfolgend finden Sie die minimale Ausgabe, die Sie von ngen erhalten, wenn keine Elemente in der Warteschlange stehen:

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.

Wenn ngen.exe mit ausgeführt wird executeQueuedItems, wird es gezwungen, alle ausstehenden Aufgaben so schnell wie möglich auszuführen. Normalerweise läuft ngen auf einem Hintergrundthread mit niedriger Priorität (und beginnt anscheinend nur zufällig). Die Idee ist, dass andere CPU-Prozesse nicht ausgehungert werden sollten - obwohl dies nicht immer funktioniert. Das interaktive Ausführen von ngen ist schneller als das Ausführen im Hintergrund - beeinträchtigt jedoch die Leistung stärker. Wie lange es dauert, hängt von Ihrer Hardware ab und davon, wie viele / welche nativen Images neu kompiliert werden müssen.

MisterSmith
quelle
Wenn ich meinen Computer einige Minuten lang im Leerlauf lasse (eigentlich eine Virtualbox-VM), frisst ngen.exe die gesamte CPU. Wenn ich jedoch einen oder alle der oben genannten Befehle in einem Administrator-Cmd-Fenster ausführe, erhalte ich schnell die Meldung "Alle Kompilierungsziele sind auf dem neuesten Stand". :-( [Oh - ich hätte vielleicht erwähnen sollen, dass dies eine Entwicklungsmaschine ist. Ich frage mich, ob ein Visual Studio-Prozess Probleme verursacht ...]
mwardm