Top  上へ  目次



エクスプローラーの方が速いんじゃね?いえ錯覚です



 最近、こんな投書を頂きました。

Q.オンラインヘルプで紹介してる、タスクマネージャのスクリーンショットにタネとか仕掛けとかあるんじゃないか?
俺の環境だと、エクスプローラーの方が速いんだが?

A.単に見た目に騙されているだけです。
見た目よりも実益を優先した仕組みになっているだけです。

 タネも仕掛けもございません。
 嘘だと思うなら、ご自身で試してもらえれば一目瞭然でしょう。

 確かに、As/Rは動作環境を選びます。
 特にCPUコア数が1個のPCでは、けっして速くないです。
 今どき、1CPUコアの環境なんて入手する方が難しいのですが、仮想環境とかだと結構ありえます。
 そのためにシングルコア用の差分ファイルもリリースしているわけですよ。

 次に、ウィルススキャンソフトからは、わりと危険物扱いされてます。
 ファイル一覧の画面に表示するために、ファイルの属性情報をざーっと取得するわけですが、この行為がウィルススキャンソフトいわく「怪しい動作」ということらしいです。
 何故かは、私に聞かないでくださいね(苦笑)
 要するに、これらのソフトから除外設定をする必要があります。
 他にも、ダブルクリックしてコマンドのシェル実行とかも割り込みがかかったりしますし、シェル経由のファイルのコピーなどの操作も割り込みがかかったりします。

 あとウィルススキャンソフトも高い頻度でやらかす大バグですが、エクスプローラーのことしか考えてなくて、悪さしているシェル拡張ソフトも多々あります。
 例えば、あるソフトをインストールしたら右クリックメニューの表示が極端に表示が遅くなったとか、コーデックをインストールしたら縮小版表示が遅くなったとか、プロパティを開こうとしたら落ちたとか真っ白になったとか、ファイル貼り付けで落ちるとかとかとかとかとかとか・・・。
 最近は開発系のTortoiseSVNとか、トラブル事例が多いです。
 無論エクスプローラーも巻き込まれてることも多々ありますが、トラブル事例があまりに多すぎて、もう涙出てきます。


 だいたい、この3点が本来の性能を発揮できない環境の特徴です。
 OSが不安定になるってぇのも、この辺りが原因であることもかなり多いと思いますよ。





 次に、エクスプローラーが速く見える理由を、軽く語りたいと思います。

 まずタスクマネージャって負荷の統計値ですから、時間が短いと誤差がスンゲェ大きくなってますので、スクリーンショットの方はあまり気にしないでください。
 あれでも、うちの方が圧倒的に不利になるスクリーンショットだったりします。

 エクスプローラーが速く見えるのは、あくまでも錯覚に過ぎません。
 まずエクスプローラーって表示が2段構え(もしかしたら3段かもしれません)なんですね。
 エクスプローラーの表示の手順は、概ね以下の通りです。
 (正確な時間はページ下部のベンチマークを参照してください)

1.とりあえず画面に見える分だけ走査した時点で画面に表示、未ソート(2-3秒ぐらい、表示1回目)
2.残りのフォルダーの中を走査(5秒くらい)
3.ソートや描画などに必要な情報取得とソート(80秒くらい)
4.一時表示していたものと、並び替えたものを入れ替え(2-3秒ぐらい、表示2回目)
5.ソート結果の反映、詳細情報の表示など(8-10秒ぐらい、多分表示3回目)
その他.スクロールに合わせて詳細情報の取得と描画

 As/Rの表示の手順は、概ね以下の通りです。
1.フォルダーの中を走査、情報取得、ソート(3.3秒ぐらい)
2.詳細情報の取得と、画面に表示(0.5秒ぐらい、表示1回目)
その他.スクロールに合わせて詳細情報の取得と描画

 キモの部分は、最初の表示がエクスプローラーが2-3秒程度で一部の表示完了していますが、バックグラウンドで合計1分40秒くらい動いてます。(スクロール時のアイコン画像の取得を除く)
 対して、As/Rは最初に表示されるまで約4秒くらいかかっていますが、全ての処理が終わってます。(スクロール時のアイコン画像の取得を除く)
 実際、エクスプローラーの全部の処理が完了する1分40秒ほど待たないと、単一アイテムの操作やモード切替など、一部の操作しかできません。
 例えばCtrl+A(全選択のショートカットコマンド)とか押しても全く反応しませんし、選択状態の保持といったこともされません。
 当たり前ですよね、一覧の生成が完了してないんですから。

 つまり、エクスプローラーの見た目は速いけど、実際にかかってる負荷量は桁違いに大きく、バックグラウンドでゴリゴリ動いていています。
 それは、各種ドライバも含めたハードウェアや、OSの管理そのものにも当然影響しますし、カーネル使用時間を考慮すれば他のプロセスに影響を与える負荷量も大きく変わってきます。
 このように数十倍の速度差があるのにエクスプローラーが速いって思ってる人は、見た目に騙されているというわけです。


 さらに、ファイルの追加/削除/リネームなどをした場合、一覧の更新速度による格差はもっと酷いことになります。
 これ多分、最初の一部表示を優先するあまり、表示しているアイテムを維持管理してないんだと思います。
 つまりハッシュ検索も、2分木検索も使えないので、更新されたアイテムを探すのにシーケンシャルサーチなんぞやらかしています。
 As/Rの方は、あれでも一覧表示の速度を、あえて犠牲にして一覧の更新のための使い捨てインデックスを作成しています。

 その結果、更新時の計算量の計算式で言えば、As/R=1に対して、エクスプローラー=O(N)ですから勝負にならんのですよ。
 更に格差は広がり、数百倍の差がつきます。


 「見た目速けりゃいーんだよ」という意見もあるでしょう。
 As/Rも最初、エクスプローラーの動きを真似してみました。
 でも、実応答時間が今の3倍くらいの速度になっちゃうんで、見た目よりも実用的な能力を優先しました。

 そうですね、エクスプローラーで全ての作業が完結するのであれば、見た目優先でも良いでしょう。
 でも考えてみてください、エクスプローラーでPCの操作って普通は完結しませんよね?
 「一覧が表示されました」の次は、当然一覧からファイルを選択して何かするんでしょ?それができないんですけど?ということです。
 ワードなり、エクセルなり、ブラウザなり、エディタなり、アーカイバなり、お絵かきソフトなり、名刺管理なり、データベースなり、ゲームなり、各種のドライバなり、かな漢字変換なり、その他もろもろのソフトがあってPCの作業は成り立つのであって、縁の下の力持ちであるべきであるファイル管理ソフトが負荷を食うって本末転倒です。

 だってファイル管理ソフトって、本質的にはデータを維持管理/消費するものであって、生産性がなく何も生み出さないシロモノですからね。


 またバッテリー駆動の環境の場合は、大幅にバッテリーの消耗率が変わってきます。
 エクスプローラーの場合はCPU1個がフル稼働状態なので、CPUが持つ省エネ機能が全て無効になっているどころか、最近だとTurbo Boostとか消費電力を許容量限界まで使い切っている状態ですから当然です。
 あと負荷かかってる間にディスクアクセスも結構あり・・・HDDなりSSDなりのアクティブ時って消費電力は跳ね上がるわけで、ハードウェア構成にもよりますけど4〜5桁ぐらいの差が発生しそうです。
 ここまで差がついちゃうと、比較すること自体が陳腐だと思いますので検証もやめておきます。




※オマケ
 エクスプローラーと比較のベンチマークとって見ました。
 CPU負荷が3%未満になるまでの時間です。
 並び順は、エクスプローラーは名前順、As/Rは文字コード順です。
 ファイル数は100万個、全角・半角混在
 As/Rの速度を上げる安全装置を全て解除する以外は、全て初期値
 OSはWindows7で、ほぼ初期状態の性能評価用の環境です。

操作内容
1.ファイル一覧の表示完了
2.先頭のファイル1個選択し、コピー&ペーストしてファイルを追加
3.2で作ったファイルをリネーム
4.3でリネームしたファイルを削除

 つまり一連の操作で、CPUの1コア以上がフルパワーで動作してる時間の計測値です。
操作As/Rexplorer速度差
一覧表示3,245ms99,220ms30.5倍
1ファイル追加1,210ms585,200ms483.6倍
1ファイルリネーム1,925ms587,840ms305.4倍
1ファイル削除1,430ms585,530ms409.5倍
合計7.8秒1857.8秒(30分57秒)238.2倍

 実際の運用例をあげるなら、大量のファイルが存在するフォルダーを開いて、ダブルクリックでExcelでファイル開いて(テンポラリファイル生成)そのまま上書き保存(古いファイルのリネーム/削除/オリジナルの名前にリネーム)という一連の流れが、As/Rなら10秒弱で全てが完了するものが、エクスプローラーなら約40分ほどCPU/HDDがフルスピード状態になる計算ですよ・・・ということです。
 もちろん、ウィンドウを閉じるなりして処理を中断することは可能ですし、一部並列で処理されることもあるでしょう。
 これは、明らかに使い方が悪い例でもあります。

 しかし、複数のCPUコアがある状態でバックグラウンドで動いていると、CPU負荷がすごい事になってることに気づけないんじゃないですかね。
 コレに気づかないと、なんか最近PCが遅い・・・PCがずっとフルスピードで動いて発熱がすごい・・・バッテリーがもたない・・・とまぁ色んなトラブルが予想されます。

 現在出回っているPCより100倍速いPCを導入とか、個人レベルで買える金額にはなりえません。
 そう考えるとフリーソフトで、そういった擬似環境を作れるってすごいですよねぇ。



※補足
 MS社の製品って悪く言われがちですが、決してそんなことはありません。
 私の目から見ても超クールすぎてため息が出るものが多々あり、先方があまり重要視していないため、これだけの差が生じているに過ぎません。
 あと、As/Rのスタンスはエクスプローラーを置き換える目的ではなく、協調動作をすることを主眼としている事を忘れないでいただけると幸いです。


※追記
 Excelはもっと遅いぞ、ちゃんと検証しろ!と突っ込みが入ったので、少し詳しく調べてみました。
 以下の情報は上書き保存コマンドを実行した時の、更新通知のログです。
 つまり、これだけの回数分だけ、上記の時間を乗じて求めることになります。
 (リネームと属性変更は、今回の比較ではほぼ等価と考えて良いでしょう)

file added: 8CD66810(新たに保存用のテンポラリファイル、追加)
time stamp or attribute changed: 8CD66810(属性変更)
time stamp or attribute changed: 8CD66810(属性変更)
time stamp or attribute changed: 8CD66810(属性変更)
time stamp or attribute changed: 8CD66810(属性変更)
time stamp or attribute changed: 8CD66810(属性変更)
time stamp or attribute changed: テスト.xl(属性変更)
time stamp or attribute changed: 8CD66810(属性変更)
time stamp or attribute changed: 8CD66810(属性変更)
file name changed - old name: テスト.xls → 2DAAC0D4.tmp(リネーム)
file name changed - old name: 8CD66810 → テスト.xls(リネーム)
time stamp or attribute changed: 2DAAC0D4.tmp(属性変更)
time stamp or attribute changed: テスト.xls(属性変更)
file deleted: 2DAAC0D4.tmp(削除)