Windows 上的 DirectX Shader Cache 可以刪嗎
DirectX Shader Cache 存放的是 shader,也就是顯示卡執行的小程式,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 的 shader 快取。要量系統那一份:
$p = "$env:LOCALAPPDATA\D3DSCache"
[math]::Round((Get-ChildItem $p -Recurse -Force -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1MB, 1)
單位是 MB。
什麼時候清才有用
| 你看到的 | 要清嗎 | 為什麼 |
|---|---|---|
| 更新驅動程式後才開始出現的異常、當機或卡頓 | 值得一試 | 過期或損壞的項目可能是原因,重建之後會換掉它 |
| 快取長到好幾 GB,而你需要空間 | 要 | 它會重新產生,不過只會針對你再玩的遊戲 |
| 遊戲每個區域第一次經過時會卡頓 | 不要 | 那是快取正在填入,清掉只會讓它再發生一次 |
| 電腦整體變慢 | 不要 | 這和它無關 |
| 例行清理 | 不需要 | 你要付出重建的代價,卻沒什麼好處 |
怎麼清
內建的方式,針對系統快取:
- 打開 設定 › 系統 › 儲存空間 › 暫存檔。
- 勾選 DirectX Shader Cache,其他項目依你的需要決定。
- 選擇 移除檔案。
磁碟清理(cleanmgr)也有相同的選項。Windows 把它登記為清理處理常式 D3D Shader Cache,測試用的 ThinkPad 上也有。
手動的話,先關掉遊戲和繪圖工具,用 Win + R 打開 %LOCALAPPDATA%\D3DSCache,再刪除裡面的內容。正在使用中的就跳過。驅動程式的快取,在遊戲關閉時,刪除上面那些資料夾裡的內容即可。NVIDIA 控制面板的 Shader Cache Size 只是限制它最大能長到多大。
清完之後會怎樣
每個遊戲第一次啟動時會重新編譯 shader。有些遊戲會顯示進度條,有些則在你移動到新區域時卡頓,直到快取重新填滿。要多久取決於遊戲和你的硬體,可能要幾分鐘。不要用第一次遊玩的感覺來判斷結果。
不要這樣做
- 不要在要玩遊戲或跑跑分之前清。那時候它會是最慢的狀態。
- 不要排程自動清。它不是會以任何有害的方式堆積的垃圾,永遠是空的快取就代表永遠在編譯。
- 不要刪上面那些路徑以外的驅動程式資料夾。
C:\Windows\System32\DriverStore和驅動程式的安裝資料夾不是快取。 - 不要期望它能修好檔案損壞的遊戲。那要用啟動器的驗證選項。
Mole 能幫上什麼
Mole for Windows 的「清理」會用名稱列出這些快取,包括 DirectX Shader Cache、DirectX Pipeline Cache,以及上面的 NVIDIA、AMD 和 Vulkan 資料夾,還有 Intel 較舊的 Local 資料夾,每一項都附上大小。Mole 不會列出目前的 Intel 驅動程式使用的 LocalLow 資料夾。它們預設不勾選,「建議」也不會包含,因為每個遊戲之後都得重新編譯 shader。你決定這個代價值得的時候,再自己勾選。Steam 每個遊戲的快取也以同樣的方式出現,而 ProgramData 裡的 NVIDIA 快取需要系統管理員權限。關於它們所在的資料夾,見AppData 裡哪些能刪。
常見問題
刪除 DirectX Shader Cache 安全嗎?
安全。Windows 會重建它。代價是遊戲下次執行時載入比較慢,或有些卡頓。
刪掉 shader 快取會提升效能嗎?
通常不會,短期內還會變差。在損壞的快取造成異常,或你需要磁碟空間時才有幫助。
DirectX Shader Cache 存在哪裡?
在 %LOCALAPPDATA%\D3DSCache。NVIDIA、AMD、Intel 和 Steam 各自在其他資料夾有自己的快取。
為什麼 shader 快取一直回來?
因為遊戲和 App 執行時會再次編譯 shader,這就是它的用途,所以不代表清理失敗。
更新驅動程式後要清 shader 快取嗎?
只有在更新後出問題才要。驅動程式通常會自己重建需要的東西,看到異常或當機時,清除是合理的一步。