我经常会遇到类似的情况,虽然我从来没有收到过这样的消息,也做了一些测试。
据我的理解,这里的核心资源受压,是GPU内存。但这不一定说明你的资源已经用完了。这可能只是意味着桌面窗口管理器检测到你运行的内存太低了,所以可以禁用该服务的一个特定功能来释放更多的内存。所以,是的,如果你只有1GB的卡,而这将是你通常的使用场景,你就已经有问题了。
我不得不再往前推一点,并启动了几个Visual Studio实例…..
……..直到接近1.5GB的大关,然后…..
SNAP!这导致Windows杀死了桌面合成器。现在,当我已经到了一个临界值的时候,当我启动了一个使用过量的GPU内存全屏的应用,我甚至可以超过这个临界值的限制。下面是在2560x1440的最大细节下运行Black Mesa一段时间后的结果:
所以,从这里可以推断出两点。一是当桌面超过75%的极限时,Windows会强制关闭桌面合成,而当在全屏应用中达到同样的极限时(可以选择退出该应用),桌面合成是不会被关闭的。
第二件事是,当你在游戏中的时候,你会产生 “嘿,我有足够的资源来运行这个游戏,为什么我的桌面资源不够用?"的想法。原因是,两者都需要同时占用内存,
Windows可能只有在你退出游戏后才会告诉你内存的情况。所以,当我在退出Black Mesa后启动另一个Visual Studio a退出Black Mesa后…..
那么,我们该怎么办呢?
获取更多的GPU内存
很简单,很简单。
禁用桌面合成(每个进程)
前面已经建议过,可以禁用单个可执行文件的桌面合成。这样做的效果是在可执行程序执行时,桌面合成会被暂时禁用。在我的测试中,这大大降低了应用程序执行时的整体内存消耗:
赏金通知中提到,这是不可取的,因为这可能会造成很多工作。但这是要禁用的地方:
我只是想把这个烦人的消息去掉!
就因为你把警告 ”你的电池快没电了!"的警告去掉了,你就只能再聊10分钟了。您只能再通话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
&001
这将重新启动桌面窗口管理器,并将我带回我的合成桌面(在这个过程中,它释放了大量的资源,耶)。但是,这将导致与通过文件属性对单个可执行文件禁用桌面合成的行为相同。