先に結論

Path of Exile 2を遊んでいたところ、Cドライブの空き容量が大きく減っていることに気づきました。

原因を調べていくと、自分の環境ではNVIDIAのDXCacheがかなり大きくなっていました。

%LOCALAPPDATA%\NVIDIA\DXCache

DXCacheはシェーダーキャッシュなので、削除してもゲームやNVIDIAドライバによって再生成されます。そのため、単純に削除するだけでは、しばらくするとまたCドライブ側にキャッシュが作られます。

今回は、Windowsのジャンクションを使って、DXCacheの実体を別SSDへ移動しました。

この記事でやることは以下です。

  • DXCacheがCドライブを圧迫しているか確認する
  • NVIDIA側のShader Cache Sizeを確認する
  • DXCacheの移動先SSDを決める
  • .bat ファイルを作成する
  • 管理者権限で実行する
  • 成功確認と元に戻す方法を確認する

Windowsのコマンドや mklink /J に慣れている人は、前半を読めばだいたい作業内容を把握できると思います。不安がある場合は、後半の詳細手順まで読んでから実行してください。

何が起きたか

Path of Exile 2を遊んでいる中で、Cドライブの空き容量が思ったより減っていることに気づきました。

最初はゲーム本体や一時ファイルを疑いましたが、確認していくと、NVIDIAのDXCacheが大きくなっていました。

DXCacheの場所は以下です。

%LOCALAPPDATA%\NVIDIA\DXCache

実際のパスとしては、だいたい以下のような場所です。

C:\Users\ユーザー名\AppData\Local\NVIDIA\DXCache

ただし、この記事ではWindowsユーザー名を直接書かなくてよいように、基本的に %LOCALAPPDATA% を使います。

原因として見つけたDXCache

DXCacheは、NVIDIAドライバが使うDirectX系のシェーダーキャッシュです。

ゲームを起動したり、マップを読み込んだり、エフェクトや描画処理が発生したりすると、GPU向けに使われるキャッシュが保存されます。

キャッシュなので、基本的には削除しても再生成されます。ただし、削除直後はゲーム起動時やロード時に再生成が走るため、一時的にカクつきやロード時間の増加が出る可能性があります。

今回、自分の環境ではPath of Exile 2を遊んでいる中でDXCacheの巨大化に気づきました。ただし、DXCacheが増える原因をPoE2だけに限定するつもりはありません。

DirectX 12を使うゲーム、Unreal Engine 5系のゲーム、エフェクトの多いゲーム、アップデート頻度の高いゲームなどでは、同じようにシェーダーキャッシュが増える可能性があります。

DXCacheが原因か確認する

まず、以下のフォルダのサイズを確認します。

%LOCALAPPDATA%\NVIDIA\DXCache

エクスプローラーのアドレスバーに貼り付けると、対象フォルダを開けます。

フォルダを右クリックしてプロパティを開き、サイズを確認します。

数GB程度なら気にならないかもしれませんが、数十GB以上になっている場合は、Cドライブを圧迫している原因の一つになっている可能性があります。

Cドライブ全体でどのフォルダが大きいのかを見たい場合は、TreeSize FreeやWizTreeのような容量確認ツールを使うと探しやすいです。ただし、この記事ではDXCacheの移動方法に絞って説明します。

DXCacheは削除しても再生成される

DXCacheはキャッシュなので、削除しても基本的には再生成されます。

そのため、Cドライブの空き容量を一時的に増やすだけなら、DXCacheを削除するだけでも効果はあります。

ただし、ゲームを起動したり、ドライバ更新後に再生成されたりすると、またCドライブ側にキャッシュが作られます。

今回やりたいことは、DXCacheを削除するだけではありません。元の場所にDXCacheがあるように見せつつ、実体だけを別SSDへ移動します。

そのために、Windowsのジャンクションを使います。

まず確認したNVIDIAのShader Cache Size

別SSDへ移動する前に、NVIDIA側のShader Cache Sizeも確認します。

NVIDIA Control PanelまたはNVIDIA Appで、以下のような設定を確認します。

Global Settings
→ Shader Cache Size

日本語UIでは、「グローバル設定」「シェーダーキャッシュサイズ」のような表記になっている場合があります。

これはNVIDIA側の設定であり、この記事で紹介するスクリプトの機能ではありません。

この設定で改善する場合もありますが、環境やゲームによっては、それでもDXCacheによる容量圧迫が気になる場合があります。

10GBDriver Default などへの変更は、あくまで見直し候補です。ここを変更すれば必ずDXCacheが指定サイズ以下に収まる、という意味ではありません。

詳しい人向け:やっていることの要約

この方法でやっていることは、ざっくり言うと以下です。

rmdir /S /Q "%LOCALAPPDATA%\NVIDIA\DXCache"
mklink /J "%LOCALAPPDATA%\NVIDIA\DXCache" "自分で決めた移動先"

ただし、実際にはそのまま実行するのではなく、以下の安全確認を入れます。

  • 移動先 DST が設定されているか確認する
  • 移動先ドライブが存在するか確認する
  • explorer.exe を一時停止し、最後に起動し直す
  • DXCacheが削除できたことを確認してから mklink /J する
  • 削除できなければ中断する

つまり、削除に失敗したままジャンクション作成へ進まないようにしています。

ここから詳細手順

ここからは、あまりWindowsのコマンドに慣れていない人向けに、実際の手順を順番に書きます。

全体の流れは以下です。

  1. DXCacheの移動先を決める
  2. Gistからスクリプトをコピーする
  3. メモ帳に貼り付けて .bat ファイルとして保存する
  4. スクリプト内の DST を自分の移動先に変更する
  5. ゲームや関連アプリを閉じる
  6. .bat ファイルを管理者権限で実行する
  7. ジャンクションが作成されたことを確認する
  8. 必要に応じて、失敗時の対処や元に戻す方法を確認する

この流れが分かっていれば、後半の手順も追いやすくなります。

この記事では、スクリプトを .bat ファイルとして保存して実行します。コマンドを1行ずつ手入力するのではなく、スクリプトとしてまとめて実行する方法です。

移動先フォルダは自分で決める

DXCacheの移動先は、自分で決めます。

記事中では例として以下を使います。

D:\NVIDIACache\DXCache

ただし、Dドライブ固定ではありません。

自分がキャッシュを置きたいSSD上のフォルダを指定してください。おすすめは、常時接続されている内蔵SSDです。

避けた方がよい移動先は以下です。

  • 外付けHDD
  • USBメモリ
  • 抜き差しする外付けSSD
  • 空き容量が少ないドライブ
  • ドライブレターが変わりやすいドライブ

ジャンクションは、指定したパスを見に行きます。

たとえば D:\NVIDIACache\DXCache を指定したあとで、DドライブがEドライブに変わると、リンク先が壊れます。

実行用スクリプトを用意する

このスクリプトは、.bat ファイルとして保存して実行します。

ここでは例として、move-dxcache.bat という名前で保存します。

.bat の全文はGitHub Gistに置いています。

1. メモ帳を開く

Windowsのメモ帳を開きます。

2. Gistからスクリプトをコピーする

以下のリンクからGistを開き、表示されたスクリプトをコピーしてください。

実行用スクリプト

move-dxcache.bat をGistで開く

コピーした内容をメモ帳に貼り付けます。

3. DST を自分の環境に合わせて設定する

スクリプト内に、以下のような場所があります。

rem 例:
rem set "DST=D:\NVIDIACache\DXCache"

set "DST="

このままだと、スクリプトは安全のため停止します。

実行前に、set "DST=" の部分を、自分がDXCacheを置きたい場所に変更してください。

例:

set "DST=D:\NVIDIACache\DXCache"

D: は例です。実際には、自分がキャッシュを置きたいSSD上のフォルダを指定してください。

4. .bat ファイルとして保存する

メモ帳で以下のように保存します。

move-dxcache.bat

拡張子が .txt にならないように注意してください。

保存時に move-dxcache.bat.txt になってしまう場合は、エクスプローラーで「ファイル名拡張子」を表示して確認します。

5. ゲームや関連アプリを閉じる

実行前に、ゲームや関連アプリを閉じます。

例として、以下のようなアプリです。

  • Path of Exile 2
  • Steam
  • Chrome
  • Discord
  • NVIDIA App
  • G HUB
  • Phone Link

自分の環境では、explorer.exe 以外にも、Chrome、G HUB、PhoneExperienceHost.exeなどがDXCache関連ファイルを掴んでいることがありました。

削除に失敗する場合は、一度Windowsを再起動し、再起動直後に最低限のアプリだけの状態で実行します。

6. 管理者権限で実行する

move-dxcache.bat を右クリックして、「管理者として実行」を選びます。

または、管理者権限のコマンドプロンプトを開いて、保存した場所へ移動してから実行します。

デスクトップに保存した場合の例です。

cd /d "%USERPROFILE%\Desktop"
move-dxcache.bat

実行時の補足

また、スクリプト実行中にタスクバーやデスクトップ表示が一時的に消えることがあります。これは explorer.exe を一時停止しているためです。

スクリプトの最後で explorer.exe を起動し直すため、通常は自動で戻ります。

Chrome、Steam、Discord、G HUB、Phone Linkなどは環境差が大きいため、自動では終了しません。削除に失敗する場合は、これらのアプリを閉じるか、Windowsを再起動して最低限のアプリだけの状態で再実行してください。

Gistのスクリプトには日本語コメントや日本語の echo が含まれています。

環境によってはコマンドプロンプト上の表示が文字化けする場合があります。処理自体とは別問題ですが、気になる場合はbatファイルをShift_JISで保存するか、表示メッセージを英数字に置き換えてください。

成功確認

スクリプトが成功すると、確認結果としてジャンクションが表示されます。

例えば以下のような表示です。

<JUNCTION>     DXCache [D:\NVIDIACache\DXCache]

この状態になっていれば、Cドライブ側にあるように見えるDXCacheの実体は、指定した別ドライブ側にあります。

注意点として、成功後もエクスプローラー上では以下のフォルダが存在しているように見えます。

%LOCALAPPDATA%\NVIDIA\DXCache

これは失敗ではありません。通常フォルダではなく、ジャンクションとして存在しています。

WindowsやNVIDIAからは元の場所にDXCacheがあるように見えますが、実体は指定した移動先にあります。

削除できない場合の対処

DXCacheを削除できない場合、特定のアプリがDXCache内のファイルを掴んでいることがあります。

まずは以下のようなアプリを閉じます。

  • Chrome
  • Steam
  • Discord
  • NVIDIA App
  • G HUB
  • Phone Link

それでも削除できない場合は、リソースモニターで確認します。

resmon

リソースモニターを開いたら、以下を確認します。

CPU タブ
→ 関連付けられたハンドル
→ DXCache または .nvph で検索

ここに表示されたプロセスが、DXCache関連ファイルを掴んでいる可能性があります。

ただし、記事内のスクリプトでは、ChromeやSteamなどの一般アプリを自動終了しません。ユーザー環境によって開いている理由が違うためです。

削除できない場合は、該当アプリを閉じるか、Windowsを再起動してから再実行してください。

再起動後は、Chrome、Steam、Discord、NVIDIA App、G HUB、Phone Linkなどを起動する前に、管理者権限でスクリプトを実行します。

エラー別の対処

DST が未設定です と表示された場合

DST が未設定です。

スクリプト内の以下を、自分の移動先に変更してください。

set "DST="

例:

set "DST=D:\NVIDIACache\DXCache"

移動先ドライブが見つかりません と表示された場合

指定したドライブが存在しません。

D:E: など、実際に存在するドライブを指定してください。

外付けドライブの場合、接続状態やドライブレターが変わっていないかも確認します。

移動元 DXCache を削除できませんでした と表示された場合

DXCacheを掴んでいるアプリがあります。

Chrome、Steam、Discord、NVIDIA App、G HUB、Phone Linkなどを閉じるか、Windowsを再起動してから再実行してください。

ジャンクションの作成に失敗しました と表示された場合

移動元または移動先のパスに問題がある可能性があります。

以下を確認します。

  • 管理者権限で実行しているか
  • DST のパスが正しいか
  • 移動先ドライブが存在しているか
  • すでに同名フォルダやジャンクションが不自然に残っていないか

元に戻す方法

元に戻す場合は、ジャンクションを削除して、Cドライブ側に通常フォルダを作り直します。

管理者権限のコマンドプロンプトで、以下を実行します。

rmdir "%LOCALAPPDATA%\NVIDIA\DXCache"

mkdir "%LOCALAPPDATA%\NVIDIA\DXCache"

確認します。

dir "%LOCALAPPDATA%\NVIDIA"

通常フォルダに戻っていれば、以下のように表示されます。

<DIR>          DXCache

ここで削除しているのは、Cドライブ側にあるジャンクションです。

移動先の実体フォルダも不要な場合は、自分で指定した移動先フォルダを別途削除します。

例:

rmdir /S /Q "D:\NVIDIACache\DXCache"

この D:\NVIDIACache\DXCache は例です。自分が指定した移動先に読み替えてください。

デメリット

この方法にはデメリットもあります。

デメリット内容
NVIDIA公式の保存先変更ではないWindowsのジャンクションで逃がしているだけ
移動先ドライブに依存する指定した移動先ドライブが使えないとDXCacheにアクセスできない
HDDに置くと遅くなる可能性ロード時間やカクつきの原因になる可能性がある
ドライブレター変更に弱い移動先を D:\... にしたあと、DがEなどに変わるとリンク先が壊れる
ドライバ更新後に確認が必要まれにフォルダ構成が変わる可能性がある

基本的には、移動先は常時接続のSSDがおすすめです。

HDDや、抜き差しする外付けディスクは避けた方が安全です。

Q&A

Q. DXCacheは削除しても大丈夫?

キャッシュなので、基本的には削除しても再生成されます。

ただし、削除直後はゲームの初回起動やロード時に一時的に重くなる可能性があります。

Q. Windows 11でも使える?

使えます。

この記事で使っている mklink /J は、Windows 10 / Windows 11で使える機能です。

Q. PowerShellでもできる?

できますが、この記事のコマンドは管理者権限のコマンドプロンプトで実行する前提です。

PowerShellでは rmdir /S /Qmklink の扱いが違うため、この記事ではcmdを使います。

Q. 移動先はHDDでもいい?

動作はする可能性があります。

ただし、ゲーム用途ではSSD推奨です。

HDDに置くと、ロードやシェーダー読み込みで不利になる可能性があります。

Q. レイトレーシングを使っていなくても増える?

増えることはあります。

レイトレーシングはキャッシュが増えやすくなる要素の一つですが、主因とは限りません。

ゲームタイトル、エンジン、DirectX 12、アップデート頻度、ドライバ更新などの影響もあります。

Q. ドライブレターが変わるとどうなる?

リンクは古い移動先パスを見に行きます。

たとえば D:\NVIDIACache\DXCache にしたあと、DドライブがEドライブに変わると、リンク先にアクセスできません。

自動でCドライブに戻るわけではありません。

まとめ

NVIDIAのDXCacheがCドライブを圧迫している場合、まずはShader Cache Sizeを確認します。

それでも厳しい場合は、Windowsのジャンクションを使って、DXCacheの実体を別SSDへ移す方法があります。

ただし、これはNVIDIA公式の保存先変更ではなく、Windows側の仕組みを使う回避策です。

移動先には、常時接続されていてドライブレターが変わりにくいSSDを指定し、成功確認と元に戻す方法を把握したうえで実行してください。