
1. 先搞清楚 DXCache 到底是個(gè)什么角色1.1 從一次磁盤告警說起前陣子幫朋友收拾一臺(tái)用了三年的游戲本1TB 的系統(tǒng)盤只剩不到 40GB 可用空間。用磁盤分析工具一掃C:\Users\你的用戶名\AppData\Local\NVIDIA\DXCache這個(gè)文件夾赫然占了將近 18GB。朋友一臉懵地問我這玩意兒是病毒嗎能刪嗎刪了會(huì)不會(huì)把顯卡驅(qū)動(dòng)搞壞這個(gè)問題其實(shí)特別典型。只要你在 Windows 上用過 NVIDIA 顯卡并且玩過幾款 DirectX 12 的游戲這個(gè)文件夾幾乎必然會(huì)膨脹起來。它不是什么垃圾軟件留下的殘骸也不是系統(tǒng)關(guān)鍵組件而是 NVIDIA 顯卡驅(qū)動(dòng)在運(yùn)行 DirectX 程序時(shí)主動(dòng)生成的一個(gè)著色器編譯緩存目錄。要理解它為什么存在得先明白現(xiàn)代游戲渲染的一個(gè)基本流程。GPU 執(zhí)行渲染任務(wù)時(shí)需要運(yùn)行一種叫“著色器”的小程序這些程序負(fù)責(zé)計(jì)算每個(gè)像素的顏色、光照、陰影、材質(zhì)表現(xiàn)等等。著色器源碼是高級(jí)語(yǔ)言寫的GPU 不能直接執(zhí)行必須先編譯成 GPU 能讀懂的機(jī)器碼。這個(gè)編譯過程如果每次啟動(dòng)游戲都重來一遍那加載時(shí)間會(huì)非常感人而且游戲過程中還容易出現(xiàn)卡頓。所以 NVIDIA 驅(qū)動(dòng)做了一個(gè)很聰明的設(shè)計(jì)第一次編譯完著色器之后把編譯結(jié)果存到硬盤上下次再遇到同樣的著色器直接讀取緩存跳過編譯。這個(gè)緩存就放在 DXCache 文件夾里。名字里的“DX”指的就是 DirectX。1.2 它和 GLCache、NV_Cache 的區(qū)別很多人搜索的時(shí)候會(huì)看到好幾個(gè)類似名字的文件夾容易搞混。我在這里一次性說清楚文件夾名稱服務(wù)對(duì)象典型位置能否刪除DXCacheDirectX 9/10/11/12 程序%LOCALAPPDATA%\NVIDIA\DXCache可以會(huì)自動(dòng)重建GLCacheOpenGL 程序%LOCALAPPDATA%\NVIDIA\GLCache可以會(huì)自動(dòng)重建NV_Cache舊版驅(qū)動(dòng)緩存%LOCALAPPDATA%\NVIDIA\NV_Cache可以部分版本已棄用ComputeCacheCUDA/計(jì)算任務(wù)%LOCALAPPDATA%\NVIDIA\ComputeCache可以會(huì)自動(dòng)重建這幾個(gè)文件夾的邏輯是一樣的都是驅(qū)動(dòng)為了加速而做的本地緩存。它們的共同特點(diǎn)是——?jiǎng)h了不會(huì)導(dǎo)致硬件損壞也不會(huì)讓驅(qū)動(dòng)失效只是下次運(yùn)行對(duì)應(yīng)程序時(shí)需要重新編譯一遍。1.3 為什么它會(huì)變得這么大一個(gè)著色器緩存動(dòng)輒十幾 GB聽起來很夸張但拆開看就合理了?,F(xiàn)代 3A 游戲的著色器變體數(shù)量極其龐大。同一個(gè)材質(zhì)在不同的光照條件、不同的畫質(zhì)設(shè)置、不同的分辨率、不同的抗鋸齒模式下可能需要不同的著色器變體。一款大型游戲編譯出幾萬(wàn)個(gè)著色器變體是家常便飯每個(gè)變體編譯后的機(jī)器碼從幾 KB 到幾百 KB 不等累積起來輕松上 GB。再加上如果你玩過很多款游戲或者同一款游戲反復(fù)切換畫質(zhì)設(shè)置緩存會(huì)不斷累積。驅(qū)動(dòng)本身對(duì)緩存大小有一定的管理策略但這個(gè)策略在不同版本里表現(xiàn)不一樣有些版本清理得比較積極有些版本就放任它漲。所以你會(huì)看到有人 DXCache 只有幾百 MB有人卻超過 20GB這跟使用習(xí)慣和驅(qū)動(dòng)版本都有關(guān)系。注意如果你用的是筆記本電腦并且系統(tǒng)盤是容量較小的 SSDDXCache 膨脹是導(dǎo)致 C 盤空間告急的常見原因之一值得定期關(guān)注。2. 刪除 DXCache 到底會(huì)發(fā)生什么2.1 刪除后的真實(shí)影響先給結(jié)論可以刪刪了不會(huì)壞但會(huì)有短期副作用。具體來說刪除 DXCache 之后顯卡驅(qū)動(dòng)不會(huì)失效系統(tǒng)不會(huì)藍(lán)屏硬件不會(huì)受損。下次啟動(dòng)游戲或 DirectX 程序時(shí)驅(qū)動(dòng)會(huì)重新編譯著色器這個(gè)過程會(huì)導(dǎo)致首次加載時(shí)間變長(zhǎng)。游戲過程中可能出現(xiàn)短暫的卡頓因?yàn)橹髟趯?shí)時(shí)編譯。緩存文件夾會(huì)被重新創(chuàng)建并隨著使用逐漸重新填充。我用一臺(tái) RTX 3070 的臺(tái)式機(jī)做過實(shí)測(cè)。刪除前 DXCache 約 12GB刪除后第一次啟動(dòng)《賽博朋克 2077》加載時(shí)間從原來的約 25 秒增加到約 50 秒進(jìn)入游戲后的前幾分鐘有輕微幀率波動(dòng)之后恢復(fù)正常。第二次啟動(dòng)就恢復(fù)到 25 秒左右了。所以這個(gè)代價(jià)是一次性的不是永久性的。2.2 什么情況下適合刪不是所有情況都值得刪。我總結(jié)了幾種適合清理的場(chǎng)景系統(tǒng)盤空間嚴(yán)重不足DXCache 占用超過 5GB且你急需釋放空間。游戲出現(xiàn)異常的渲染錯(cuò)誤比如貼圖閃爍、著色器相關(guān)的崩潰清理緩存有時(shí)能解決。更新了顯卡驅(qū)動(dòng)之后舊緩存可能和新驅(qū)動(dòng)不兼容清理一下更穩(wěn)妥。長(zhǎng)時(shí)間沒清理過緩存里堆積了大量已經(jīng)不再玩的游戲的著色器數(shù)據(jù)。反過來如果你磁盤空間充裕游戲運(yùn)行也正常那就沒必要折騰。緩存的存在本身就是為了讓你體驗(yàn)更好頻繁刪除反而每次都要重新編譯。2.3 什么情況下不建議刪有幾種情況我建議你忍一忍你正在玩一款對(duì)著色器編譯特別敏感的游戲比如某些開放世界大作重新編譯期間的卡頓體驗(yàn)很差。你的 CPU 性能較弱著色器編譯主要靠 CPU重新編譯的耗時(shí)會(huì)明顯更長(zhǎng)。你只是看到文件夾大就手癢實(shí)際上磁盤還有充足空間。提示刪除前可以先記錄一下文件夾大小刪完對(duì)比一下釋放了多少空間心里有數(shù)。3. 手把手教你安全清理 DXCache3.1 找到文件夾的正確姿勢(shì)最直接的方法是在文件資源管理器地址欄輸入%LOCALAPPDATA%\NVIDIA\DXCache回車就能直接跳轉(zhuǎn)。%LOCALAPPDATA%是一個(gè)環(huán)境變量會(huì)自動(dòng)展開成C:\Users\你的用戶名\AppData\Local。這樣你就不用去記具體的用戶名路徑了。如果你用的是 Windows 11AppData 文件夾默認(rèn)是隱藏的直接瀏覽可能看不到。這時(shí)候要么用上面的環(huán)境變量方法要么在資源管理器里開啟“顯示隱藏的項(xiàng)目”。3.2 刪除操作的具體步驟刪除本身很簡(jiǎn)單但有幾個(gè)細(xì)節(jié)要注意先關(guān)閉所有正在運(yùn)行的游戲和 DirectX 程序。如果游戲還在運(yùn)行緩存文件被占用刪除會(huì)失敗或者只刪掉一部分。關(guān)閉 NVIDIA 相關(guān)的后臺(tái)進(jìn)程??梢栽谌蝿?wù)管理器里看看有沒有NVIDIA Container之類的進(jìn)程不過通常不關(guān)也能刪。直接刪除整個(gè) DXCache 文件夾或者只刪除里面的內(nèi)容。我傾向于刪除整個(gè)文件夾驅(qū)動(dòng)下次會(huì)自動(dòng)重建。如果提示文件被占用重啟電腦后再刪這是最穩(wěn)妥的辦法。如果你習(xí)慣用命令行可以用管理員權(quán)限打開 PowerShell執(zhí)行Remove-Item -Path $env:LOCALAPPDATA\NVIDIA\DXCache -Recurse -Force這條命令會(huì)遞歸刪除整個(gè)文件夾。執(zhí)行前確保沒有程序占用。3.3 用磁盤清理工具批量處理如果你不想手動(dòng)找Windows 自帶的磁盤清理工具其實(shí)也能幫上忙。在開始菜單搜索“磁盤清理”選擇系統(tǒng)盤點(diǎn)擊“清理系統(tǒng)文件”然后在列表里找找有沒有 NVIDIA 相關(guān)的緩存項(xiàng)。不過實(shí)測(cè)下來磁盤清理工具對(duì) DXCache 的識(shí)別并不總是準(zhǔn)確有時(shí)候列不出來所以手動(dòng)刪還是最可靠的。另外有一些第三方的磁盤分析工具比如 WizTree、TreeSize可以快速定位大文件夾。WizTree 讀取 NTFS 的 MFT 表掃描速度極快幾秒鐘就能把整個(gè)盤的文件大小排好序找 DXCache 這種大文件夾特別方便。3.4 刪除后的驗(yàn)證刪完之后你可以重新啟動(dòng)一款 DirectX 游戲然后回到 DXCache 路徑看看會(huì)發(fā)現(xiàn)文件夾被重新創(chuàng)建了里面開始出現(xiàn)新的緩存文件。這就說明一切正常驅(qū)動(dòng)在按預(yù)期工作。如果你刪完之后發(fā)現(xiàn)文件夾沒有重建也不用慌可能是你還沒運(yùn)行過需要它的程序。跑個(gè)游戲或者用 GPU 跑個(gè) DirectX 應(yīng)用它自然就回來了。4. 比刪除更好的方案從根源上管理緩存4.1 修改緩存大小上限NVIDIA 驅(qū)動(dòng)其實(shí)提供了一個(gè)隱藏的緩存大小控制選項(xiàng)只是沒有做進(jìn)圖形界面需要通過 NVIDIA Profile Inspector 這個(gè)第三方工具來調(diào)整。這個(gè)工具可以讀取和修改驅(qū)動(dòng)的底層配置包括著色器緩存的最大容量。操作思路是下載 NVIDIA Profile Inspector找到全局配置或者特定游戲的配置搜索和 shader cache 相關(guān)的選項(xiàng)把默認(rèn)值改成一個(gè)合理的上限比如 5GB 或 10GB。這樣驅(qū)動(dòng)在緩存達(dá)到上限后會(huì)自動(dòng)清理舊數(shù)據(jù)不會(huì)無限膨脹。需要說明的是這個(gè)工具修改的是驅(qū)動(dòng)內(nèi)部數(shù)據(jù)庫(kù)操作前建議先導(dǎo)出備份配置萬(wàn)一改出問題可以恢復(fù)。不同驅(qū)動(dòng)版本里這個(gè)選項(xiàng)的名字和位置可能略有差異需要自己找一下。4.2 定期清理的自動(dòng)化思路如果你不想手動(dòng)記著這件事可以做一個(gè)簡(jiǎn)單的計(jì)劃任務(wù)。用 Windows 任務(wù)計(jì)劃程序設(shè)置每月執(zhí)行一次刪除 DXCache 的腳本。腳本內(nèi)容就是上面那條 PowerShell 命令。不過我不建議把頻率設(shè)得太高一個(gè)月一次足夠了。太頻繁的話你每次玩游戲都要重新編譯著色器體驗(yàn)反而下降。4.3 把緩存目錄遷移到其他盤這是我最推薦的方案尤其適合系統(tǒng)盤小、游戲盤大的用戶。思路是用一個(gè)目錄符號(hào)鏈接把 DXCache 的實(shí)際存儲(chǔ)位置轉(zhuǎn)移到空間充裕的硬盤上。具體做法關(guān)閉所有游戲和 NVIDIA 相關(guān)進(jìn)程。把%LOCALAPPDATA%\NVIDIA\DXCache文件夾移動(dòng)到目標(biāo)位置比如D:\NVIDIA_Cache\DXCache。以管理員身份打開命令提示符執(zhí)行mklink /J %LOCALAPPDATA%\NVIDIA\DXCache D:\NVIDIA_Cache\DXCache這條命令創(chuàng)建的是一個(gè)目錄聯(lián)接Junction對(duì)系統(tǒng)和程序來說路徑還是原來的路徑但實(shí)際數(shù)據(jù)存在 D 盤。這樣既保留了緩存加速的好處又不占用系統(tǒng)盤空間。同樣的方法也適用于 GLCache 和 ComputeCache。我自己就是這么干的系統(tǒng)盤從此再?zèng)]因?yàn)轱@卡緩存告急過。注意移動(dòng)文件夾之前一定要先關(guān)閉占用它的程序否則移動(dòng)會(huì)失敗或者數(shù)據(jù)損壞。移動(dòng)完成后原來的路徑下應(yīng)該是一個(gè)帶快捷方式箭頭的聯(lián)接文件夾。5. 常見疑問與踩坑記錄5.1 刪了之后游戲變卡了怎么辦這是最常見的反饋。原因很簡(jiǎn)單著色器需要重新編譯。解決辦法就是多玩一會(huì)兒讓緩存重新建立起來。通常玩?zhèn)€十幾分鐘到半小時(shí)常用著色器就編譯得差不多了之后流暢度會(huì)恢復(fù)到刪除前的水平。如果玩了很久還是卡那可能不是緩存的問題而是驅(qū)動(dòng)版本、游戲設(shè)置或者硬件本身的問題需要另外排查。5.2 為什么刪了之后文件夾大小沒變有幾種可能刪除時(shí)游戲還在后臺(tái)運(yùn)行文件被占用實(shí)際沒刪掉。你刪的是另一個(gè)同名文件夾比如某些游戲自己也有緩存目錄。刪除后你又運(yùn)行了游戲緩存立刻重新生成了。建議刪除后先不要運(yùn)行任何 DirectX 程序直接查看文件夾是否還存在確認(rèn)刪除成功。5.3 提示需要 System 權(quán)限才能刪除這個(gè)報(bào)錯(cuò)通常出現(xiàn)在你試圖刪除整個(gè) NVIDIA 文件夾而不是只刪 DXCache 內(nèi)容的時(shí)候。NVIDIA 文件夾下有些子文件夾的權(quán)限設(shè)置比較特殊。解決辦法是只刪除 DXCache 里面的內(nèi)容保留 DXCache 文件夾本身。或者用管理員權(quán)限的命令行來刪。如果還是不行重啟進(jìn)入安全模式再刪基本都能解決。5.4 DXCache 和驅(qū)動(dòng)版本的關(guān)系不同版本的 NVIDIA 驅(qū)動(dòng)對(duì) DXCache 的管理策略不一樣。有的版本會(huì)主動(dòng)限制緩存大小有的版本則比較放任。如果你發(fā)現(xiàn)某個(gè)驅(qū)動(dòng)版本下緩存漲得特別快可以考慮更新到更新的驅(qū)動(dòng)版本或者回退到之前表現(xiàn)正常的版本。另外驅(qū)動(dòng)更新后舊緩存可能失效這時(shí)候清理一次是合理的。但不需要每次更新驅(qū)動(dòng)都清理除非你遇到了實(shí)際的渲染問題。5.5 常見問題速查表問題現(xiàn)象可能原因處理方式刪除時(shí)提示文件占用游戲或驅(qū)動(dòng)進(jìn)程未關(guān)閉關(guān)閉程序或重啟后刪除刪除后游戲首次加載變慢著色器重新編譯正常現(xiàn)象多玩一會(huì)兒即可文件夾刪除后立即重建有程序在后臺(tái)運(yùn)行確認(rèn)無 DirectX 程序運(yùn)行提示需要管理員權(quán)限文件夾權(quán)限限制用管理員命令行或安全模式緩存反復(fù)膨脹驅(qū)動(dòng)管理策略或游戲特性設(shè)置上限或遷移目錄刪除后出現(xiàn)渲染異常緩存與驅(qū)動(dòng)不匹配更新驅(qū)動(dòng)或重新編譯緩存5.6 幾個(gè)我踩過的坑第一個(gè)坑有一次我在游戲運(yùn)行時(shí)刪 DXCache結(jié)果刪了一半剩下的文件鎖住了。后來游戲崩潰了一次重啟才好。所以一定要先關(guān)游戲。第二個(gè)坑我用 mklink 遷移目錄的時(shí)候忘了先關(guān)閉 NVIDIA Container 進(jìn)程導(dǎo)致聯(lián)接創(chuàng)建成功但緩存寫入異常。后來重啟電腦重新操作才正常。遷移這種底層操作重啟一次是最保險(xiǎn)的。第三個(gè)坑我曾經(jīng)把 DXCache 設(shè)成只讀想阻止它膨脹。結(jié)果驅(qū)動(dòng)寫入失敗游戲直接報(bào)錯(cuò)。不要試圖用只讀屬性來限制緩存正確做法是設(shè)上限或遷移。6. 擴(kuò)展思考緩存管理的通用邏輯6.1 不只是 NVIDIA其實(shí) AMD 顯卡也有類似的著色器緩存機(jī)制只是文件夾名字和位置不同。Intel 核顯同樣有緩存目錄。甚至很多專業(yè)軟件比如視頻剪輯、3D 渲染工具也會(huì)在本地生成各種緩存。理解 DXCache 的邏輯之后你面對(duì)其他緩存文件夾時(shí)也能舉一反三先搞清楚它是干什么的再判斷能不能刪最后考慮怎么管理。6.2 緩存是空間和時(shí)間的交換本質(zhì)上所有緩存都是拿存儲(chǔ)空間換加載時(shí)間。DXCache 用硬盤空間換著色器編譯時(shí)間瀏覽器緩存用硬盤空間換網(wǎng)頁(yè)加載時(shí)間都是同一個(gè)道理。所以判斷一個(gè)緩存該不該刪核心就一句話你更缺空間還是更缺時(shí)間??臻g緊張就刪時(shí)間敏感就留兩者都想要就遷移或設(shè)上限。6.3 養(yǎng)成定期體檢的習(xí)慣我現(xiàn)在的做法是每隔一兩個(gè)月用磁盤分析工具掃一遍系統(tǒng)盤看看哪些文件夾異常膨脹。除了 DXCache常見的還有瀏覽器緩存、微信/QQ 的聊天文件、各種開發(fā)工具的緩存目錄。定期清理這些比等到磁盤爆滿再手忙腳亂要好得多。說到底DXCache 不是什么需要提心吊膽的東西。它就是一個(gè)老老實(shí)實(shí)幫你加速的緩存文件夾刪了它會(huì)自己回來留著它也不會(huì)咬人。真正需要你花心思的是建立一套適合自己的磁盤管理習(xí)慣讓這些緩存待在它們?cè)摯牡胤秸妓鼈冊(cè)撜嫉目臻g。我自己從最初看到 18GB 嚇一跳到現(xiàn)在用目錄聯(lián)接把它安排得明明白白中間踩的坑都寫在上面的內(nèi)容里了希望對(duì)你有用。