診断マトリクス:メモリリークの種類・スタンバイメモリ枯渇とカクつきのメカニズム
PCゲームを起動した直後は120 FPSで快適に動作しているにもかかわらず、2〜3時間連続でプレイしていると突如35 FPS程度までフレームレートが落ち込み、視点を動かすたびに激しいカクつき(スタッター)が発生することがあります。これがゲーム自体の「C++オブジェクトのメモリリーク」なのか、それともWindowsの「スタンバイメモリの肥大化」によるものなのかを見極める必要があります。
| メモリトラブルの種別 | 発生箇所 | タスクマネージャーでのメモリ挙動 | Windowsスタンバイメモリへの影響 | 推奨される具体的対策 |
|---|---|---|---|---|
| ゲームエンジン内のメモリリーク | ゲームのプライベートメモリ | 時間経過に伴い単調増加(例: 6GB -> 14GB -> 24GB) | 直接の影響は少ない | ゲーム本体のバグ。ゲームを定期的に再起動し修正パッチを待つ |
| VRAMの枯渇と共有メモリへの退避 | グラフィックボードのVRAM | VRAMが100%になり、システムRAMへテクスチャが溢れ出す | PCIeバスが飽和し劇的なスタッター発生 | テクスチャ品質を1段階下げる、DLSS/FSRのQuality適用 |
| Windowsスタンバイメモリの肥大化 | OSのファイルキャッシュ | ゲームのメモリは一定だが、「空き(Free)」が200MB以下に枯渇 | ゲームがメモリ要求した際にOSの解放が追いつかない | ISLC(Intelligent Standby List Cleaner)の常駐導入 |
| 非ページプールリーク | Windowsカーネルドライバ | パフォーマンス項目の「非ページプール」が数GBに増殖 | OS全体のコアメモリが枯渇しフリーズ | ネットワークカード等のドライバを更新(Killer網等) |
なぜWindowsの「スタンバイメモリ」がゲームを止めるのか
Windowsは空いている物理RAMを有効活用するため、一度読み込んだファイルを スタンバイメモリ(Standby List) としてキャッシュします:
- 長時間ゲームをプレイすると、ほぼ全ての空きメモリがスタンバイメモリで埋め尽くされます。
- 仕様上は、ゲームが新しいマップ展開のために2GBのメモリを要求した際、Windowsは瞬時にスタンバイメモリを破棄して引き渡すはずです。
- しかし高負荷状態では、このページ解放処理に数十〜数百ミリ秒の遅延(レイテンシスパイク)が発生します。
- ゲームの描画スレッドがメモリ割り当て待ちで一時停止し、ゲーム画面上で200〜500msの強烈な引っ掛かりとして体感されます。
実践的な改善プロトコル
ステップ1:ISLC(Intelligent Standby List Cleaner)の導入
- DDUの開発元であるWagnardsoftから Intelligent Standby List Cleaner (ISLC) を導入します。
- 以下のしきい値を設定:
- The list size is at least:
1024 MBに設定。 - Free memory is lower than:総物理メモリの半分に設定(16GB環境なら
8192 MB、32GB環境なら16384 MB)。
- The list size is at least:
- Start ISLC minimized and auto-Start monitoring にチェック。
- Enable custom timer resolution にチェックし、タイマー精度を
0.50 msに設定。 - Start をクリック。空きメモリが危険域に達した瞬間、ミリ秒単位でスタンバイメモリが自動破棄されます。
ステップ2:リソースモニターによる真のメモリリーク判別
Win + Rを押し、resmonと入力してリソースモニターを起動。- 「メモリ」タブでゲームプロセスの コミット(KB) を監視します。
- 何時間経過してもコミット量が上限なく増え続ける場合は、ゲームエンジン自体の不具合と判断できます。