次回起動のための虎の巻
プログラムが起動すると、Windowsは実行ファイルとそのDLLのうち、どのブロックが実際にディスクから読まれたかを記録し、そのトレースをC:\Windows\Prefetchに.pfファイルとして保存します。次回の起動時、ローダーはトレースを参照し、読み込みを最適な順序で発行します。冷たい起動が生む散らばった小さな読み出しではなく、大きく順序立てた一括の読み出しです。同じトレースは、回転ディスクでブートファイルを配置するReadyBootと、Windows 10でSuperfetchから改名される前のその名で知られるSysMain——要求より前に頻用ブロックをメモリへ先読みするサービス——の餌にもなります。このフォルダの中に自己目的で存在するものは何もありません。どのファイルも、次の起動を安くするためにWindowsが取ったメモです。
フォルダは自分自身も管理します。トレースは実行ファイルのパスのハッシュに紐づくため、移動や更新を経たプログラムには新しいトレースが与えられ、古いものは失効します。そしてシステムは、ディレクトリをだいたい直近の千ファイルに刈り込みます。典型的なマシンには10~20KBの.pfファイルが数百個あり、合計5~15MB程度。クリーンアップツールが赤い警告バーで演出する「問題」の全容は、これが精々です。
- C:\Windows\Prefetchは、よく起動するプログラムごとに1つの.pfトレースを保持する
- トレースは、コールドスタートが実際に触れたディスクブロックを記録する
- ReadyBootはトレースを使い、HDD上のブートファイルを配置する
- SysMainは要求より前に、ホットなブロックをメモリへ先読みする
- Windowsはフォルダを約千件の新しいトレースに刈り込む——メガバイトであってギガバイトではない
削除が速くではなく遅くする理由
トレースを削除してもWindowsは諦めません。ゼロからメモを取り直します。クリーンアップ後、各プログラムの初回起動はコールドスタートの速度で走り、HDDでは2秒の起動と7秒の起動の差に相当します。使うアプリケーションごとに1回ずつ支払う形です。2回目、3回目の起動は、新しいトレースが蓄積されるにつれ回復します。この儀式を正当化する「Prefetchは肥大化する」という主張は、実は一番弱い部分です。フォルダは自身を数十メガバイトに抑え込み、クリーナー自身のファイルリストがそれを裏付けています。
ありがちな注釈では、SSDではprefetchはもう関係ないとされます。均す対象のシークがほぼ無料だからです。これは半分だけ正しい話です。WindowsはソリッドステートのシステムディスクでSysMainをオフにすることが多いものの、トレースファイルは現れ続け、読み込みを順序付けることで起動時間を今も削ります。削除しても測定できる利益はなく、パージ後にプログラムが初めて起動するたびに小さく繰り返される損失が残るだけです。正当なケースは一つだけ。破損したトレースのせいで特定のアプリケーションの起動がおかしくなる場合です。まれな話で、フォルダ全体ではなくその1個の.pfファイルを削除すれば直ります。
よくある質問
WindowsのPrefetchフォルダ内のファイルを削除しても安全ですか?
壊れません——Windowsがトレースを再構築します——ただし自業自得です。クリーンアップ後、各プログラムの初回起動は、新しいトレースが蓄積されるまで測ってわかるほど遅くなります。
システムディスクがSSDの場合、prefetchは無効化すべきですか?
いいえ。WindowsはSSDではすでにSysMainを抑え、フォルダは小さいまま、トレースは今も起動時の読み込み順序を助けています。prefetcherの無効化は目的を失って生き延びたWindows XP時代の調整です。
購入前にライセンスの内容をご確認ください。
一度限りの 30 分試用では基本ツールを利用できます。PRO 機能は有料ライセンスを有効にするまでロックされています。
次に読む記事
お問い合わせ: [email protected]