打开磁盘分析工具,本来是想清理Windows 11又塞进来的系统垃圾,结果发现一个叫DXCache的文件夹,占了40GB,分布在946个文件里。而整个显卡驱动的安装体积,还不到1GB。这个文件夹在做它设计要做的事,但我想不起来自己什么时候同意让它长到这么大。
这40GB和显卡驱动本身无关
DXCache是Nvidia用来存放已编译DirectX着色器的地方。GPU渲染游戏之前,必须先编译这些指令,把编译好的结果留着,下次启动就能跳过这一步。这也是为什么一款游戏第一次跑可能卡顿,第二次就顺滑了。
奇怪的是它的位置。驱动装在Program Files里,DXCache却在用户配置文件的AppData\Local\NVIDIA下——一个大多数人几乎没有理由打开的目录。装新驱动不碰它,卸旧驱动也不碰它。
对于经常换驱动做测试和跑分的人来说,每次更换都会留下为旧版本驱动编译的着色器。这些条目在失去用处之后不会自动清理,新的着色器一层层叠上去,而没有任何地方会告诉你这个文件夹到底有多重。
Nvidia给了着色器缓存一个上限,而作者把它关掉了
Nvidia确实提供了相关设置。打开Nvidia应用,进入图形、全局设置,能找到“着色器缓存大小”,里面有缓存大小选项,可以从禁用、几个固定上限,一直到驱动默认和无限制。
作者的设置不知何时被调成了“无限制”。问题在于,“无限制”并不是“一个大缓存”的意思,而是字面意义上的没有天花板,没有任何机制告诉它什么时候该停。而驱动默认值其实是16GB——这个数字在Nvidia应用里找不到,在控制面板里也找不到,只出现在一篇关于删除损坏着色器缓存文件的支持文章里,以“当前值”的形式被提及。那篇文章的结尾还建议,“更大的容量可以为更大的游戏库提供最佳性能”。
值得注意的是,Nvidia没有在任何地方建议你去看看这个文件夹在硬盘上实际占了多少。于是用默认值的人永远不会想到它,而像作者这样开着无上限的人,最后就攒出了40GB的死存储。
卸载、磁盘清理、存储感知,全都绕过了它
想回收SSD空间时,通常的路径是:去“添加或删除程序”里找找有没有忘了的大块头,卸载一两个游戏,再跑一遍存储感知看看Windows认为能清掉什么。这些操作没有一个能碰到DXCache的主体。
它不是程序,所以没有东西可卸载。存储感知不碰它。磁盘清理里确实有一个“DirectX着色器缓存”选项,听起来很对路,但它只清理Windows自己在D3DSCache下的缓存,不清理Nvidia的。
就算把生成这些着色器的游戏删掉也没用,因为缓存属于驱动,不属于游戏。玩得越多,堆积越多;游戏删了,缓存还在原地。这就是它能躲过每周例行清理的原因。在作者的台式机上,它在一块1TB SSD上吃掉了40GB;而在作者的512GB硬盘、带Nvidia显卡的笔记本上,同样的行为如果放任不管,留给用户的存储空间会少得多。除非自己碰巧翻到这个文件夹,否则根本没有理由知道它在那里。
发现它超标之后,可以这样处理
第一步是确认大小。进入%Localappdata%\NVIDIA,查看DXCache文件夹的体积。如果数字让你意外,Nvidia给出的操作是:把缓存大小设为“关闭”,重启,清空DXCache和GLCache,然后再设回驱动默认。
这么做几乎不会损失什么,最多是在一次游戏过程中因为缓存重建而少一点顺滑感。相比之下,40GB的存储空间显然更值钱。
热门跟贴