Ciągle jestem w podobnej sytuacji, chociaż nigdy nie otrzymuję dokładnie tego samego komunikatu i przeprowadziłem trochę testów.
O ile mi wiadomo, głównym zasobem, który jest tutaj obciążony, jest pamięć GPU . Ale to niekoniecznie oznacza, że w ogóle brakuje Ci tego zasobu. Może to po prostu oznaczać, że Menedżer okien pulpitu wykrył, że masz tak niski poziom, że jedną z określonych funkcji tej usługi można wyłączyć, aby zwolnić więcej pamięci.
Aby to przetestować, zacząłem otwierać aplikacje wymagające dużej ilości pamięci GPU:
Jest to nieco ponadprzeciętne użycie w mojej konfiguracji z potrójnym ekranem z kilkoma kluczowymi odtwarzaczami (Visual Studio 2012 (włączone przyspieszenie sprzętowe), PhpStorm, Aptana Studio, Chrome, Firefox, IE, ...). Tak, jeśli masz tylko kartę 1 GB i byłby to zwykły scenariusz użytkowania, już miałbyś problem.
Musiałem posunąć się trochę dalej i uruchomić kilka kolejnych instancji Visual Studio ...
... dopóki nie zbliżył się do znaku 1,5 GB i ...
KŁAPNIĘCIE! To spowodowało, że Windows całkowicie zabił komponowanie pulpitu (i uwolnił cenne zasoby).
Teraz, gdy jestem już na poziomie krytycznym i uruchamiam aplikację, która korzysta z nadmiernej ilości pamięci GPU na pełnym ekranie , mogę nawet przekroczyć ten krytyczny limit. Oto wynik po uruchomieniu Black Mesa na 2560 x 1440 przy maksymalnych szczegółach:
Można zatem odjąć dwie rzeczy. Przekroczenie znaku 75% na pulpicie może zmusić system Windows do wyłączenia kompozycji pulpitu, ale po osiągnięciu tego samego limitu w aplikacji pełnoekranowej (i opcjonalnie po wyjściu z tej aplikacji) kompozycja pulpitu nie jest wyłączona.
Drugą rzeczą jest to, że kiedy jesteś w grze, możesz pomyśleć: „Hej, mam wystarczającą ilość zasobów, aby uruchomić tę grę, dlaczego nie mam wystarczającej ilości zasobów na pulpit?”. Powodem jest to, że oba wymagają pamięci w tym samym czasie.
Windows może być w stanie poinformować Cię o sytuacji w pamięci dopiero po wyjściu z gry. Więc kiedy uruchamiam kolejne Visual Studio po wyjściu z Black Mesa ...
Co możemy z tym zrobić?
Uzyskaj więcej pamięci GPU
Słodki i prosty.
Wyłącz kompozycję pulpitu (na proces)
Jak już zasugerowano, możesz wyłączyć kompozycję pulpitu dla jednego pliku wykonywalnego. Powoduje to, że kompozycja pulpitu jest tymczasowo wyłączona podczas wykonywania pliku wykonywalnego. To drastycznie zmniejszyło ogólne zużycie pamięci podczas wykonywania aplikacji w moich testach:
Zawiadomienie o nagrodach wspomina, że jest to niepożądane, ponieważ jest to potencjalnie dużo pracy.
Wyłącz kompozycję pulpitu (globalnie)
Nie uważałbym tego za rozwiązanie, ponieważ zwykle pożądana jest kompozycja pulpitu. Ale tutaj można to wyłączyć:
Chcę tylko pozbyć się irytującej wiadomości!
To, że usunąłeś ostrzeżenie „ Bateria jest prawie pusta! Możesz rozmawiać tylko przez 10 minut! ” Nie oznacza, że możesz rozmawiać dłużej niż 10 minut. W rzeczywistości telefon najprawdopodobniej po prostu się wyłączy i to wszystko. Jak to na ulepszenie?
Nigdy nie zakładałem, że wiadomość można wyłączyć i nie widzę, jak można to uznać za korzyść.
Możesz myśleć, że wiesz lepiej, ale nie wiesz. Jeśli system mówi ci, że wyczerpują się zasoby, to znaczy, że tak.
Ale tak nie jest! Wiem!
Ok, załóżmy, że Windows nie jest wystarczająco inteligentny, aby wykryć szczególną sytuację, w której się znajdujesz, a komunikat ostrzegawczy jest po prostu irytującą niedogodnością. Co teraz?
Chodzi mi o to, że osobiście mam na to wpływ i to mnie denerwuje. Ponieważ nawet nie dostaję tego ostrzeżenia. Windows po prostu zmienia mój profil kolorów i to wszystko. I to mi się podoba.
Kiedy to się dzieje, zwykle szybko uruchamiam skrypt, który wywołuje
net stop uxsms & net start uxsms
Oto pełny skrypt. Otworzy się monit UAC i ponownie uruchomi usługę, aby można ją było uruchomić z dowolnego miejsca. Mam przypięte do menu Start.
@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
cscript //E:JScript //nologo "%~f0"
@goto :EOF
)
NET STOP uxsms
NET START uxsms
@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5);
@end
Spowoduje to ponowne uruchomienie Menedżera okien pulpitu i powrót do mojego złożonego pulpitu (i uwalnia wiele zasobów podczas procesu).
Wiedząc o tym, możesz również zbudować sobie specjalne środowisko gry, w którym zatrzymasz usługę przed rozpoczęciem gry, aby zwalczyć całe to zachowanie. Spowoduje to jednak identyczne zachowanie, jak wyłączenie kompozycji pulpitu dla pojedynczego pliku wykonywalnego za pośrednictwem właściwości pliku.