Mi trovo costantemente in una situazione simile anche se non ricevo mai lo stesso identico messaggio, e ho fatto un po’ di test in giro.
Per quanto ne so, la risorsa principale che è sotto stress qui, è la Memoria GPU. Ma questo non indica necessariamente che si stia esaurendo questa risorsa in generale. Potrebbe semplicemente significare che il Desktop Window Manager ha rilevato che si sta eseguendo così basso che una caratteristica specifica di questo servizio potrebbe essere disabilitata per liberare più memoria.
Per testare questo, ho iniziato ad aprire applicazioni ad alta intensità di memoria della GPU:
Questo è un po’ al di sopra della media nella mia configurazione a triplo schermo con alcuni giocatori chiave in esecuzione (Visual Studio 2012 (accelerazione hardware abilitata), PhpStorm, Aptana Studio, Chrome, Firefox, IE, …). Quindi, sì, se hai solo una scheda da 1 GB e questo sarebbe il tuo scenario di utilizzo abituale, avresti già un problema.
Ho dovuto spingere un po’ più in là e avviare un altro paio di istanze di Visual Studio…
…fino a quando non si è avvicinato alla soglia di 1,5 GB e…
SNAP! Questo ha fatto sì che Windows uccidesse completamente il compositing del desktop (e liberasse alcune risorse preziose).
Ora, quando sono già a un livello critico, e avvio un'applicazione che utilizza quantità eccessive di memoria GPU a schermo intero , posso anche andare oltre questo limite critico. Ecco il risultato dopo aver eseguito Black Mesa per un po’ di tempo su 2560x1440 al massimo dei dettagli:
Quindi, da questo si possono dedurre due cose. Mentre andare oltre la soglia del 75% sul desktop può costringere Windows a disabilitare la composizione del desktop, quando si raggiunge lo stesso limite in un'applicazione a schermo intero (e, facoltativamente uscendo da quell'applicazione) la composizione del desktop non viene disabilitata.
La seconda cosa è che, mentre sei nel tuo gioco, puoi farti venire l'idea “Ehi, ho abbastanza risorse per eseguire questo gioco, perché non ho abbastanza risorse per il desktop? Il motivo è che entrambi richiedono memoria allo stesso tempo.
Windows potrebbe essere in grado di dirti la situazione della memoria solo dopo che sei uscito dal gioco. Quindi, quando avvio un altro Visual Studio dopo l'uscita di Black Mesa…
Allora, cosa possiamo fare?
Ottenere più memoria GPU
Dolce e semplice.
Disabilitare la composizione del desktop (per processo)
Come già suggerito, è possibile disabilitare la composizione del desktop per un singolo eseguibile. Questo ha l'effetto di disabilitare temporaneamente la composizione del desktop durante l'esecuzione dell'eseguibile. Questo ha ridotto drasticamente il consumo complessivo di memoria mentre l'applicazione viene eseguita nei miei test:
&004
L'avviso di bounty menziona che questo non è auspicabile, in quanto si tratta di un lavoro potenzialmente molto impegnativo.
Disabilita composizione desktop (globalmente)
Non lo considererei una soluzione, in quanto la composizione desktop è di solito desiderata. Ma ecco dove disattivarla:
&004
Voglio solo liberarmi del fastidioso messaggio!
Solo perché si toglie l'avviso ” *La tua batteria è quasi scarica! Puoi parlare solo per altri 10 minuti! *“ non significa che puoi parlare per più di 10 minuti. Infatti, molto probabilmente il tuo telefono si spegnerà semplicemente e questo è tutto. Ora, come può essere un miglioramento?
Non ho mai dato per scontato che il messaggio possa essere spento e non vedo come questo possa essere considerato un vantaggio.
Potresti pensare di saperne di più, ma non è così. Se il sistema vi dice che sta esaurendo le risorse, è così.
Ma non è così! Lo so!
Ok, supponiamo che Windows non sia abbastanza intelligente da rilevare la situazione particolare in cui vi trovate e che il messaggio di avvertimento sia semplicemente un fastidioso inconveniente. E adesso?
Il fatto è che, personalmente, anch'io ne sono colpito e questo mi infastidisce molto. Perché non ricevo nemmeno quel messaggio di avvertimento. Windows cambia semplicemente il mio profilo di colore e questo è tutto. E questo mi piace, in effetti.
Quando succede di solito eseguo rapidamente uno script che chiama
net stop uxsms & net start uxsms
Ecco lo script completo. Aprirà un prompt UAC e riavvierà il servizio in modo che possa essere attivato da qualsiasi luogo. L'ho bloccato nel menu di avvio.
@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
``` &001
Questo riavvia il Desktop Window Manager e mi riporta al mio desktop composto (e libera molte risorse nel processo, evviva).
Sapendo questo, puoi anche costruirti un ambiente di gioco speciale in cui fermi il servizio prima di iniziare il gioco per combattere tutto questo comportamento. Tuttavia, questo causerà un comportamento identico a quello di disabilitare la composizione del desktop per un singolo eseguibile attraverso le proprietà del file.