2016年7月29日金曜日

tags.wsfの動作速度を確認

昨日公開したtags.wsfではdirコマンドでファイルを検索しています。
プログラム作成前は「Windows7の検索機能はわりと速い印象だから検索でファイル特定する処理は実用的な速度で動作するだろう」と思っていました。
検索機能とは、以下のようなヤツのことです。



実際にどれくらいの速度で動作するのか確認しました。



まず、フォルダを大量に作成するプログラムを作成しました。

上記のPrgを実行した結果、以下のようになりました。



本当は10の5乗=10万個のフォルダができる筈ですが、途中でエラーが生じたため7万弱のフォルダができました。



このフォルダを対象にして、アイテム名のボタンをクリックしてみました。
(dirコマンドの開始前から終了後までの秒数を調べるようにプログラムを書き換えてあります)



結果は以下の通り
1回目 4600 ミリ秒
2回目 4552 ミリ秒
3回目 4616 ミリ秒


フォルダ数:7万弱で5秒弱…というのが問題になるかどうかは人それぞれだと思いますが、条件を変えるとどうなるのか気になりました。


まずは検索先フォルダの一番上の階層に対象ファイルを置いてみました。



結果は以下。変化ありません。dirコマンドは1つでも見つけたら中断するというものではないので、目的のものが有ろうが無かろうが関係なく、探す場所のフォルダの数によって速度が変わるものと思われます。
1回目4532 ミリ秒
2回目4658 ミリ秒
3回目4554 ミリ秒


ちなみに上記のテストはRAMドライブという、SSDより高速な領域でやっていました。


SSDで同じフォルダ構成にして



試した結果は以下。
1回目7284 ミリ秒
2回目6789 ミリ秒
3回目6722 ミリ秒


HDDでも同様に試した結果は以下。何故かSSDよりHDDの方が僅かに速い。
1回目6368 ミリ秒
2回目6355 ミリ秒
3回目6278 ミリ秒


他の手段も試してみます。


Windowsにはwhereコマンドというものがあります。
dirコマンドとwhereコマンドを比較しているサイトが見つからなかったので、どんな違いがあるのか詳細は不明ですが、whereのオプションを見る限り、今回の用途で速度の差は出ないかもしれません……が、ものは試しです。


whereコマンドを使うようにプログラムを書き換えてテストしました。(HDDで)
1回目4679 ミリ秒
2回目4524 ミリ秒
3回目4462 ミリ秒


ちょっと速いです。


Windows Searchというものがあります。
ググると「停止方法」の記事ばかりが表示されていて悪の権化のように嫌われているかのように見えますが、試しに利用してみることにしました。

まずは普通に検索ボックスで検索します。



「インデックスが作成されていない場所~~」のところをクリックして「インデックスに追加」をクリックします。



「インデックスに追加」ボタンをクリックします。



コントロールパネル → 大きいアイコン → インデックスのオプションで以下の画面が見られます。



「○○○個のインデックスが作成されました。」の数字の部分が徐々に増えていきます。
結構時間がかかります。わたしはこの記事を作成しながら完了を待ちました。

実際にWindows Searchを使う場合は検索する直前にインデックスを作成するのではなく、検索用フォルダとして設定しているフォルダ内にファイルをどんどん保存していき、インデックス作成はCPUがアイドル状態の時にジワジワ進めておいてもらい、必要な時にサクっと検索するイメージで…

完了したら以下の表示になりました。



Windows Search用のインデックス作成がwhereコマンドの高速化に繋がるのか不明ですが、試してみました。


テスト先はHDD。インデックスの有無はwhereコマンドには関係なさそうです。
1回目4506 ミリ秒
2回目4530 ミリ秒
3回目4538 ミリ秒


エクスプローラの検索ボックスで検索したら直後にファイルが表示されました。
それをコマンドラインから利用(して間接的にHTAでも利用)する方法は無いようです。。
タグからアイテム名を検索して、アイテム名から対象のアイテムへスムーズにアクセスできると良いのですが。。
アイテム名を検索ボックスにコピペして使う、というプログラムにするのはちょっと抵抗があります。。



0 件のコメント:

コメントを投稿