Windows 上的 DirectX 着色器缓存可以删吗
DirectX 着色器缓存存的是 Windows 编译好的着色器,也就是显卡运行的小程序,这样游戏和 App 就不用再编译一遍。它可以放心删,Windows 自己的清理工具里就有这一项,代价是下次启动要重建,游戏可能加载变慢或者卡顿一阵子,所以确实占了不少空间、或者怀疑它坏了时再清,不要当成日常维护。
它在哪里
系统缓存在 %LOCALAPPDATA%\D3DSCache,每份缓存一个文件夹,显卡驱动和游戏还有各自的:
| 用户文件夹下的路径 | 属于谁 |
|---|---|
AppData\Local\D3DSCache |
Windows DirectX |
AppData\Local\Microsoft\DirectX Shader Cache |
Windows DirectX 管线缓存 |
AppData\Local\NVIDIA\DXCache、AppData\Local\NVIDIA\GLCache |
NVIDIA |
AppData\LocalLow\NVIDIA\PerDriverVersion\DXCache |
NVIDIA |
AppData\Local\AMD\DXCache、AppData\Local\AMD\VkCache |
AMD |
AppData\Local\Intel\ShaderCache、AppData\LocalLow\Intel\ShaderCache(新版驱动) |
Intel |
AppData\Local\VulkanCache |
Vulkan |
有哪些取决于你的显卡,Steam 在自己的库里按游戏存了一份,可以看 Steam 着色器缓存。量系统缓存的大小:
$p = "$env:LOCALAPPDATA\D3DSCache"
[math]::Round((Get-ChildItem $p -Recurse -Force -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1MB, 1)
单位是 MB。
什么时候清才有用
| 看到的情况 | 要不要清 | 原因 |
|---|---|---|
| 更新驱动后开始花屏、崩溃或卡顿 | 值得试 | 过期或损坏的条目可能是原因,重建会换掉它们 |
| 缓存涨到很多 GB,又确实需要空间 | 可以 | 它会重新生成,但只有再玩的游戏才会 |
| 游戏每到新区域第一次都卡 | 不要 | 这正是在填充缓存,清了又要来一遍 |
| 电脑整体变慢 | 不要 | 和它没关系 |
| 日常清理 | 不需要 | 付出重建的代价,得到的很少 |
怎么清
系统缓存用内置的办法:
- 打开“设置 › 系统 › 存储 › 临时文件”。
- 勾选“DirectX 着色器缓存”,其他的按需要来。
- 选择“删除文件”。
磁盘清理(cleanmgr)里也有同样的选项,Windows 把它注册成清理程序 D3D Shader Cache,ThinkPad 测试机上也有。
手动清的话,关掉游戏和显卡工具,用 Win + R 打开 %LOCALAPPDATA%\D3DSCache,删掉里面的内容,正在使用的跳过。驱动的缓存,关掉游戏后删上面文件夹里的内容,NVIDIA 控制面板的“着色器缓存大小”只限制它最多占多大。
清完会怎样
每个游戏第一次启动都要重新编译着色器,有的显示进度条,有的是走到新区域时卡一下,直到缓存填满,要多久取决于游戏和硬件,可能是几分钟,不要拿第一次游玩来判断效果。
不要这样做
- 不要在玩游戏或跑分之前清,那时候是最慢的。
- 不要定时清,它不是会堆出害处的垃圾,缓存一直是空的,就意味着一直在编译。
- 不要删上面路径之外的驱动文件夹,
C:\Windows\System32\DriverStore和驱动的安装文件夹都不是缓存。 - 不要指望它修好文件损坏的游戏,那要用启动器的校验功能。
Mole 能做什么
Mole for Windows 的“清理”会按名字列出这些缓存,包括 DirectX Shader Cache、DirectX Pipeline Cache 和上面 NVIDIA、AMD、Vulkan 的文件夹,以及 Intel 旧的 Local 文件夹,每项都有大小,新版 Intel 驱动用的 LocalLow 文件夹 Mole 不会列出。它们默认不勾选,“推荐”也不包含,因为之后每个游戏都要重新编译着色器,你觉得值得时再勾。Steam 的按游戏缓存也是这样,ProgramData 里的 NVIDIA 缓存需要管理员权限。它们所在文件夹的其他内容,可以看 AppData 里什么能删。
常见问题
删除 DirectX 着色器缓存安全吗?
安全,Windows 会重建,代价是下次运行游戏时加载变慢或者有些卡顿。
删着色器缓存能提升性能吗?
通常不能,短期还会变差,只有缓存损坏造成花屏,或者确实需要磁盘空间时才有帮助。
DirectX 着色器缓存存在哪里?
在 %LOCALAPPDATA%\D3DSCache,NVIDIA、AMD、Intel 和 Steam 在其他文件夹里有各自的缓存。
着色器缓存为什么清了又有?
因为游戏和 App 运行时又编译了着色器,这正是它的用途,不代表清理失败。
更新驱动后要清着色器缓存吗?
只有更新后出问题才需要,驱动通常会自己重建需要的内容,出现花屏或崩溃时清一下是合理的一步。