Я постоянно находится в аналогичной ситуации, хотя я никогда не получаю то же самое сообщение, и сделал немного тестирования вокруг.
К моему пониманию, основной ресурс, который находится под нагрузкой здесь, является GPU памяти. Но это не обязательно означает, что у вас заканчивается этот ресурс в целом. Это может означать только то, что менеджер окон рабочего стола обнаружил, что вы работаете so low, что одна из особенностей этой службы может быть отключена, чтобы освободить больше памяти.
Для проверки этого, я начал открывать GPU памяти приложений:
Это несколько выше среднего использования на моем тройном экране с несколькими ключевыми игроками работает (Visual Studio 2012 (аппаратное ускорение включено), PhpStorm, Aptana Studio, Chrome, Firefox, IE, ….). Так что, да, если у вас только 1 ГБ карты и это будет ваш обычный сценарий использования, у вас уже будет проблема.
Мне пришлось нажать немного дальше и запустить еще пару экземпляров Visual Studio…
…пока он не приблизился к отметке 1,5 ГБ и…
SNAP! Это заставило Windows убить настольный композитинг полностью (и освободить некоторые драгоценные ресурсы).
Теперь, когда я уже на критическом уровне, и я запускаю приложение, которое использует чрезмерное количество памяти GPU в полноэкранном режиме, я даже могу выйти за этот критический предел. Вот результат после запуска Black Mesa некоторое время на 2560x1440 при максимальных деталях:
Таким образом, из этого можно вычесть две вещи. В то время как превышение отметки 75% на рабочем столе может заставить Windows отключить композицию рабочего стола, при достижении такого же предела в полноэкранном приложении (и, опционально, при выходе из этого приложения) композиция рабочего стола не отключается.
Вторая вещь заключается в том, что пока вы в игре, вы можете получить идею “Эй, у меня достаточно ресурсов, чтобы запустить эту игру, почему бы мне не иметь достаточно ресурсов для рабочего стола?”. Причина в том, что оба ресурса требуют памяти одновременно.
Windows может рассказать вам о ситуации с памятью только после того, как вы вышли из игры. Итак, когда я запускаю другую Visual Studio after exitting Black Mesa…
So, что мы можем с этим поделать?
Получите больше памяти GPU
Sweet and simple.
Disable Desktop Composition (per process)
Как уже было предложено, вы можете отключить композицию рабочего стола для одного исполняемого файла. В результате композиция рабочего стола временно отключается во время выполнения исполняемого файла. Это значительно сократило общее потребление памяти во время выполнения приложения в моих тестах:
В уведомлении о награде упоминается, что это нежелательно, так как это потенциально много работы.
Disable Desktop Composition (глобально)
Я бы не считал это решение, так как состав рабочего стола, как правило, желательно. Но вот где его отключить:
Я просто хочу избавиться от раздражающего сообщения!
Просто потому, что вы удалите предупреждение “ Ваша батарея почти разряжена! Вы можете говорить только еще 10 минут!” не означает, что вы можете говорить дольше 10 минут. На самом деле, ваш телефон, скорее всего, просто выключится и все. Как это можно улучшить?
Я никогда не думал, что сообщение может быть выключено, и я не понимаю, как это можно считать преимуществом.
Вы можете думать, что знаете лучше, но это не так. Если система говорит вам, что у нее заканчиваются ресурсы, это так.
Но это не так! Я знаю!
Хорошо, давайте предположим, что Windows просто не достаточно умна, чтобы обнаружить особую ситуацию, в которой вы находитесь, и предупреждающее сообщение просто доставляет вам неудобства. Что теперь?
Дело в том, что лично на меня это влияет, и это раздражает меня до чертиков. Потому что я даже не получаю это предупреждение. Windows просто меняет мой цветовой профиль и все. И мне это нравится на самом деле.
Когда это происходит, я обычно быстро запускаю сценарий, который вызывает
net stop uxsms & net start uxsms
Вот полный сценарий. Он откроет подсказку UAC и перезапустит службу, чтобы ее можно было запустить откуда угодно. Я прикрепил его к стартовому меню.
@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
Это перезапустит менеджер окон рабочего стола и вернет меня обратно на рабочий стол (и это освободит много ресурсов в процессе, да).
Зная это, вы также можете создать себе специальную игровую среду, в которой вы остановите службу, прежде чем начать игру, чтобы бороться с таким поведением. Однако, это приведет к идентичному поведению при отключении композиции рабочего стола для одного исполняемого файла через свойства файла.