Zapobiegać uruchomieniu usługi optymalizacji środowiska uruchomieniowego .NET na baterii?

11

Kiedy rano otworzyłem laptopa, uruchomił się ponownie (po zainstalowaniu aktualizacji). Teraz usługa optymalizacji środowiska uruchomieniowego .NET (ngen?) Zużywa sporo procesora, gdy komputer jest na baterii. Zastanawiam się, czy jest jakiś sposób, aby poprosić system Windows o odroczenie tych zadań, dopóki laptop nie zostanie podłączony? Miałem laptopa podłączonego na noc, ale 30% mojej baterii zniknęło po mniej niż godzinie użytkowania, co nie jest zwykłą sytuacją.

Mój komputer nie był bezczynny w tym czasie, więc zakładam, że kompiluje zestawy o wysokim priorytecie po aktualizacji .NET Framework z tego artykułu .

Sprawdziłem historię aktualizacji systemu Windows i po zainstalowaniu zainstalowałem aktualizację zbiorczą. ( Https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Chciałbym, aby Windows uruchomił optymalizację .net jako część tego procesu, zamiast czekać, aż zacznę używać laptopa na baterii.

Menadżer zadań


źródło
Właśnie zobaczyłem, że ta sama usługa nagle zjadła dużo procesora, a wentylator stał się głośny. Ale w moim przypadku było to po tym, jak uśpiłem komputer po 2 godzinach używania. Nie mogłem zatrzymać usługi (albo w oknie, które opublikowałeś powyżej nore w widoku szczegółów). Po 5-10 minutach było po wszystkim, więc myślę, że to tylko kwestia odczekania kilku minut
hansaplast

Odpowiedzi:

5

Krótka odpowiedź brzmi: nie, nie możesz odroczyć niezawodnie ngen (i nie powinieneś próbować), jedyną spójną / przydatną opcją, którą znalazłem, było zmuszanie go do ukończenia i nie pozostawianie go w tle.

Jeśli próbujesz zaoszczędzić kilka cykli procesora na baterii (lub w moim przypadku zatrzymaj serwer przed uruchomieniem ngen po przywróceniu go do pracy po aktualizacji systemu Windows), najlepszą opcją jest zmusić go do samodzielnego uruchomienia. W przypadku komputera stacjonarnego przychodzą mi na myśl 2 opcje:

  1. Utwórz plik .bat lub .ps1 na pulpicie za pomocą odpowiedniego polecenia ngen poniżej - po prostu kliknij dwukrotnie i poczekaj, aż ngen zamknie się przed odłączeniem. Jeśli zamiast tego utworzysz skrypt w folderze Windows i skrót do niego na pulpicie, możesz także użyć polecenia Command lub PowerShell lub okna dialogowego Uruchom, aby wykonać go w razie potrzeby (przed odłączeniem / po aktualizacji).

  2. Inną opcją, która powinna działać, jest użycie zaplanowanego zadania do wykonania powyższego skryptu. Uruchom go podczas uruchamiania, bez zalogowanego użytkownika, jako administrator. Jeśli twój laptop może instalować aktualizacje z dnia na dzień i może się zrestartować, powinno to działać dobrze.

Aby uruchomić ngen, potrzebujesz tylko jednego z następujących poleceń, użyj pierwszej / najbardziej odpowiedniej opcji dla twojego systemu:

  • .Net 4 lub lepsza wersja 64-bitowa C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 4 lub lepszy na 32bit C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 3 lub mniej w wersji 64-bitowej C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • .Net 3 lub mniej w wersji 32-bitowej C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

Poniżej znajduje się minimalna wydajność uzyskiwana z ngen, gdy nie ma w kolejce elementów:

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.

Po uruchomieniu programu ngen.exe executeQueuedItemszmusi go do wykonania wszystkich oczekujących zadań tak szybko, jak to możliwe. Normalnie ngen działa na wątku tła o niskim priorytecie (i najwyraźniej zaczyna się losowo), pomysł polega na tym, że nie powinien on głodzić innych procesów CPU - choć to nie zawsze działa. Interaktywne uruchamianie ngen jest szybsze niż pozostawienie go uruchomionego w tle - ale wpłynie to bardziej na wydajność. Jak długo to zajmie, zależy od twojego sprzętu i ile / które natywne obrazy wymagają ponownej kompilacji.

MisterSmith
źródło
Jeśli pozostawię moją maszynę bezczynną (właściwie wirtualną maszynę wirtualną) na kilka minut, wtedy ngen.exe zacznie jeść cały procesor. Jednak jeśli uruchomię jedno lub wszystkie powyższe polecenia w oknie cmd administratora, szybko odzyskam „Wszystkie cele kompilacji są aktualne”. :-( [Och - Może powinienem wspomnieć, że jest to maszyna programistyczna. Zastanawiam się, czy proces Visual Studio nie powoduje problemów ...]
mwardm