スキップしてメイン コンテンツに移動

エクスプローラーのファイル操作が徐々に重くなる症状とその対処法

長時間PCを再起動せずにスリープ⇔復帰で運用をしていると、エクスプローラーのファイル操作がどんどん重くなる。

これに対する対処法を暫定だが特定するに至ったので、備忘録的に記すことにする。


環境

  • システム:Windows11 Home 22H2 x64
    • 症状自体はWin10の頃からあった
    • ほぼクリーンインストールの状態でも再現したので、おそらく最近のWindowsに共通の問題と思われる
  • スペック:i7 12700 / 96GiB / フルSSD (1TB + 1TB + 2TB)
    • どう見ても足りてる
    • スペック不足で低速化とか不安定になる症状は皆無
    • ちなみにウイルス対策はWindowsDefenderのみ

症状

  • エクスプローラーを使ってフォルダ間のファイル移動やコピー、フォルダ削除等をすると発生
    • 発生時、エクスプローラーが数秒間フリーズし、結果がわかるまで待たされる
    • 移動したファイルに破損等は発生しない
  • 別のファイラーやコンソールでファイル移動すると一瞬で完了するので、エクスプローラーの表示更新だけが遅いことがわかる
    • このとき開いているエクスプローラーのウィンドウが多いほど、ファイル操作時のフリーズ時間も増える(おそらくウィンドウ数に比例する)
  • サムネイル表示状態で画像ファイルを移動するのが、おそらく最も効果的に症状を発生させられる
    • サムネイル周りの不具合を疑い「フォルダ表示設定リセット」「検索インデックスのクリア」を試したが、一瞬しか効果がなかった
  • 起動中のアプリケーションを常駐含めすべて終了しても症状は継続する
  • explorer.exeをタスクマネージャーから強制終了→再実行すると症状は発生しなくなる
  • OS起動直後はフリーズ現象発生しないか、あったとしても気づかないほど短時間のようだ
    • これがスリープと復帰を挟みながら数日間運用していると重くなっていく
  • 症状発生している状態でもシステムの能力(CPU、メモリ、ディスクアクセス)には余裕があり、スペック不足に陥っている様子はない

調査

explorer.exeを再起動させるだけで効果があることから、OS内部のプロセス間通信まわりではないかと予想がつく。アプリケーション終了は効果がなかったが、サービス停止ではどうか?

果たして、サービスを止めまくるとあるところでフリーズ現象が発生しなくなると判明。
さらに切り分けを進めていった結果、以下の4つのサービスが怪しいことがわかった。
  • Windows Event Log
  • Windows Image Acquisition (WIA)
  • WinRM (Windows Remote Management)
  • Windows Search
この4つが起動している状態では必ずフリーズが発生し、4つとも停止するとかならずフリーズは止まる。一回きりではなく何度も再現する。ただ発生条件は複雑だった。

最終的に
  • Searchを停止 → Event Logを停止 で100%発生を抑制できる
  • 両方のサービスを停止するとき同時に無効化すると、フリーズ現象は治らない
  • あくまでトリガーを自動起動に設定してある場合に限り、両サービス停止に効果がある
ことまで突き止めた。

考察

調査時の雰囲気から、Windows Searchサービスが悪さをしているらしいことは想像がつく。
ファイル操作時のインデックス更新が徐々にパフォーマンス劣化する的な問題があるのだろう。サムネイルを含む画像メタデータ更新とか?

ではEvent Logはなんなのか。
これは、おそらくWindows Searchのインデックス更新を実行するため内部的にEventを飛ばしているとかで、SearchがEvent Logに依存しているのではなかろうか。

両サービスが自動起動になっていないとダメな理由は憶測するしかない。
「無効状態だとサービス間通信自体が失敗するせいで、停止中であることをエクスプローラーが検知できない。そのため無駄にリトライを繰り返すなどしパフォーマンス低下している」というシナリオを考えたが、苦しい気もする。

対策

Windows Searchの停止・無効化をした上で再起動したところ、多少重く感じることもあるが、以前のようなひどいフリーズ現象は発生していない。
この状態で数週間ほど運用している。

サービス無効化ではフリーズ現象を回避できないって言ってたじゃねえかと思われるだろうが、
  • ひとたびエクスプローラーが遅くなってからでは、無効化しても解決にならない
    • 考察パートで確認した事実
  • しかし、そもそも遅くなる前からSearchを停止しておく分には、フリーズ現象の原因そのものを回避できるのでは?
    • つまり、OS起動時点からSearchが一度も起動しなければ、症状回避できる可能性がある
    • そのための手段がWindows Searchサービスの無効化である
という理論でやっている。ただし確証はない。

ちなみにEvent Logサービスは気軽に停止できるようなものではないので、なんとかSearchの停止だけで済ませたい思惑がある。

副作用

最後に、この対策を採ったことによる副作用について。
「スタートメニュー等における項目検索で、以前表示されていた候補が表示されなくなる」ことを確認している。
スタート上で検索を多用する使い方をしているなら不便に感じるかもしれない。逆にスタートメニューにピンどめした項目だけを使うスタイルなら、ほとんど気にならないだろう。

検索が不便になったと感じる場合は、PowerToys Runや、Everythingといったフリーソフトを使うのをおすすめする。

特に後者は「あらかじめ整理しておいたファイルを、分類したフォルダを順に辿って開く」という行為そのものを過去にするほどの、圧倒的な便利体験をもたらしてくれる。
動作も非常に高速で、インクリメンタルサーチ有効時、体感ではラグゼロで検索が完了する。



その後、解決した


コメント