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.
Odpowiedzi:
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:
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).
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:
Po uruchomieniu programu ngen.exe
executeQueuedItems
zmusi 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.źródło