Estoy constantemente en una situación similar, aunque nunca recibo el mismo mensaje, y he hecho un poco de pruebas alrededor.
A mi entender, el recurso principal que está bajo estrés aquí, es la ** memoria de la UGP**. Pero esto no indica necesariamente que te estés quedando sin este recurso en general. Puede significar simplemente que el Administrador de ventanas del escritorio ha detectado que se está ejecutando tan bajo que una característica específica de este servicio podría ser desactivada para liberar más memoria.
Para probar esto, empecé a abrir aplicaciones con uso intensivo de memoria de GPU:
Esto es un uso algo superior a la media en mi configuración de triple pantalla con unos cuantos reproductores clave ejecutándose (Visual Studio 2012 (aceleración por hardware habilitada), PhpStorm, Aptana Studio, Chrome, Firefox, IE, …). Así que, sí, si solo tienes una tarjeta de 1 GB y este sería tu escenario de uso habitual, ya tendrías un problema.
Tuve que empujar un poco más y empezar un par de instancias más de Visual Studio…
… hasta que se acercó a la marca de 1,5 GB y…
SNAP! Esto causó que Windows matara la composición del escritorio por completo (y liberara algunos recursos preciosos).
Ahora, cuando ya estoy en un nivel crítico, y comienzo una aplicación que usa cantidades excesivas de memoria de la GPU a pantalla completa, puedo incluso ir más allá de este límite crítico. Aquí está el resultado después de correr Black Mesa por un tiempo en 2560x1440 a detalles máximos:
Entonces, dos cosas pueden ser deducidas de esto. Si bien sobrepasar la marca del 75% en el escritorio puede obligar a Windows a deshabilitar la composición del escritorio, al llegar al mismo límite en una aplicación a pantalla completa (y, opcionalmente, al salir de esa aplicación) la composición del escritorio no se deshabilita.
La segunda cosa es que, mientras estás en el juego, puedes tener la idea “Oye, tengo suficientes recursos para ejecutar este juego, ¿por qué no tengo suficientes recursos para el escritorio? La razón es que ambos requieren memoria al mismo tiempo.
Es posible que Windows sólo pueda informarte sobre la situación de la memoria después de salir del juego. Por lo tanto, cuando inicio otro Visual Studio _después de salir de Black Mesa…
¿Qué podemos hacer al respecto?
Obtener más memoria de GPU
Dulce y simple.
Desactivar la composición del escritorio (por proceso)
Como ya se ha sugerido, puedes desactivar la composición del escritorio para un solo ejecutable. Esto tiene el efecto de que la composición del escritorio se deshabilita temporalmente mientras se ejecuta el ejecutable. Esto redujo drásticamente el consumo total de memoria mientras se ejecuta la aplicación en mis pruebas:
El aviso de recompensa menciona que esto es indeseable, ya que potencialmente es mucho trabajo.
Desactivar la composición del escritorio (globalmente)
No consideraría esto como una solución ya que la composición del escritorio es normalmente deseada. Pero aquí es donde hay que desactivarla:
¡Sólo quiero deshacerme del molesto mensaje!
Sólo porque quitas la advertencia ” Tu batería está casi agotada! ¡Sólo puedes hablar durante 10 minutos más!“ no significa que puedas hablar durante más de 10 minutos. De hecho, lo más probable es que tu teléfono simplemente se apague y eso es todo. Ahora, ¿cómo es eso una mejora?
Nunca asumí que el mensaje puede ser apagado y no veo cómo eso podría ser considerado un beneficio.
Puedes pensar que sabes más, pero no es así. Si el sistema te está diciendo que se está quedando sin recursos, lo está.
¡Pero no lo está! Lo sé!
Ok, asumamos que Windows no es lo suficientemente inteligente para detectar la situación especial en la que te encuentras y el mensaje de advertencia es simplemente un inconveniente molesto. ¿Y ahora qué?
La cosa es que, yo personalmente, también estoy afectado por esto y es muy molesto para mí. Porque ni siquiera recibo ese mensaje de advertencia. Windows simplemente cambia mi perfil de color y eso es todo. Y eso me gusta, en realidad.
Cuando sucede, normalmente ejecuto rápidamente un script que llama a
net stop uxsms & net start uxsms
Aquí está el script completo. Abrirá un mensaje UAC y reiniciará el servicio para que pueda ser activado desde cualquier lugar. Lo tengo anclado en el menú de inicio.
@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
Esto reinicia el Administrador de ventanas del escritorio y me devuelve a mi escritorio compuesto (y libera muchos recursos en el proceso, yay).
Sabiendo esto, también puedes construirte un entorno de juego especial en el que detengas el servicio antes de iniciar el juego para combatir todo este comportamiento. Sin embargo, esto causará un comportamiento idéntico al deshabilitar la composición del escritorio para un solo ejecutable a través de las propiedades del archivo.