Estou constantemente numa situação semelhante, apesar de nunca receber exactamente essa mesma mensagem, e já fiz alguns testes por aí.
Para o meu entendimento, o recurso central que aqui está sob tensão é a ** memória daGPU***. Mas isto não indica necessariamente que está a ficar sem este recurso em geral. Pode apenas significar que o Desktop Window Manager detectou que está a correr tão baixo que uma funcionalidade específica deste serviço poderia ser desactivada para libertar mais memória.
Para testar isto, comecei a abrir aplicações GPU de memória intensiva:
Isto está um pouco acima da média de utilização na minha configuração de ecrã triplo com alguns dos principais jogadores a correr (Visual Studio 2012 (aceleração de hardware activada), PhpStorm, Aptana Studio, Chrome, Firefox, IE, …). Portanto, sim, se tivesse apenas um cartão de 1 GB e este fosse o seu cenário de utilização habitual, já teria um problema.
Tive de ir um pouco mais longe e iniciar mais algumas instâncias do Visual Studio…
…até estar perto da marca de 1,5 GB e…
SNAP! Isto fez com que o Windows matasse completamente a composição do ambiente de trabalho (e libertasse alguns recursos preciosos).
Agora, quando já estou num nível crítico, e inicio uma aplicação que utiliza quantidades excessivas de memória GPU ** em ecrã completo** , posso até ultrapassar este limite crítico. Aqui está o resultado depois de correr Black Mesa durante algum tempo em 2560x1440 com o máximo de detalhes:
Portanto, duas coisas podem ser deduzidas disto. Ao ultrapassar a marca dos 75% no desktop pode forçar o Windows a desactivar a composição do desktop, ao atingir o mesmo limite numa aplicação de ecrã inteiro (e, opcionalmente, ao sair dessa aplicação) a composição do desktop não é desactivada.
A segunda coisa é, enquanto estás no teu jogo, podes ter a ideia “Ei, tenho recursos suficientes para correr este jogo, porque é que não tenho recursos suficientes para o desktop? A razão é que ambos requerem memória ao mesmo tempo.
As Janelas
podem apenas ser capazes de te falar sobre a situação da memória depois de teres saído do jogo. Então, quando inicio outro Visual Studio após sair de Black Mesa…
Obter mais memória GPU
Doce e simples.
Desactivar composição do ambiente de trabalho (por processo)
Como já foi sugerido, pode desactivar a composição do ambiente de trabalho para um único executável. Isto tem o efeito de desactivar temporariamente a composição da área de trabalho enquanto o executável está a ser executado. Isto reduziu drasticamente o consumo global de memória enquanto a aplicação é executada nos meus testes:
O aviso de recompensa menciona que isto é indesejável, uma vez que é potencialmente muito trabalho.
Disable Desktop Composition (global)
Eu não consideraria isto uma solução, uma vez que a composição da área de trabalho é normalmente desejada. Mas é aqui que a desactivar:
Só me quero livrar da mensagem irritante!
Só porque remove o aviso ” *A sua bateria está quase vazia! Você só pode falar por mais 10 minutos! *“ não significa que possa falar por mais de 10 minutos. De facto, o seu telefone irá muito provavelmente simplesmente desligar-se e pronto. Como é que isso pode ser melhorado?
Nunca pensei que a mensagem pudesse ser desligada e não vejo como isso possa ser considerado um benefício.
Você pode pensar que sabe melhor, mas não sabe. Se o sistema está a dizer-te que está a ficar sem recursos, está.
Mas não está! Eu sei!
Ok, vamos assumir que o Windows não é suficientemente inteligente para detectar a situação especial em que se encontra e que a mensagem de aviso é simplesmente um incómodo irritante. E agora?
A questão é que, eu pessoalmente, também sou afectado por isto e isso é irritante para caraças. Porque eu nem sequer recebo essa mensagem de aviso. O Windows simplesmente muda o meu perfil de cor e é isso. E eu gosto disso na verdade.
Quando isso acontece eu normalmente corro rapidamente um script que chama
net stop uxsms & net start uxsms
Aqui está o script completo. Irá abrir um prompt UAC e reiniciar o serviço para que possa ser accionado a partir de qualquer lugar. Eu tenho-o no menu inicial.
@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
Isto reinicia o Desktop Window Manager e traz-me de volta ao meu desktop composto (e liberta muitos recursos no processo, yay).
Sabendo disto, também pode construir um ambiente de jogo especial onde pára o serviço antes de iniciar o jogo para combater todo este comportamento. No entanto, isto causará um comportamento idêntico ao de desactivar a composição do ambiente de trabalho para um único executável através das propriedades do ficheiro.