スポンサードリンク

各種ファイル検索(Dir関数・FileSystemObject・FindFirstFile関数)比較(ファイル検索比較7)

前回まででDir関数・FileSystemObject・FindFirstFile関数と3種類のファイル検索を検証してみた。

今回はそれぞれの検索方法の特徴や処理速度などを比較検証してシリーズの締めくくりとしたい。

処理速度

まずは検索スピードについて検証してみる。

条件1

フォルダ数:39

ファイル数:7,111

内蔵HDD

主に画像ファイル

計測単位:秒

Dir関数 FileSystemObject FindFirstFile関数
1回目 0.273438 2.625000 0.062500
2回目 0.234375 2.632813 0.117188
3回目 0.281250 2.617188 0.101563
4回目 0.281250 2.625000 0.109375
5回目 0.289063 2.609375 0.101563
6回目 0.273438 2.640625 0.085938
7回目 0.250000 2.625000 0.101563
8回目 0.289063 3.007813 0.101563
9回目 0.250000 2.703125 0.109375
10回目 0.273438 2.734375 0.101563
平均 0.269531 2.682031 0.099219

FileSystemObjectの遅さが際立つ結果となっています。

Dir関数はFileSystemObjectの約10倍速く、FindFirstFile関数はさらに約2.7倍速いです。

条件2

フォルダ数:2,501

ファイル数:21,224

外付けHDD

主に音楽ファイル

計測単位:秒

Dir関数 FileSystemObject FindFirstFile関数
1回目 12.578125 0.742188
2回目 10.750000 0.796875
3回目 10.710938 0.734375
4回目 10.484375 0.765625
5回目 10.796875 0.757813
6回目 10.937500 0.734375
7回目 10.468750 0.726563
8回目 10.890625 0.726563
9回目 10.882813 0.726563
10回目 11.093750 0.804688
平均 10.959375 0.751563

条件1の時程の差はありませんが、それでも約14倍FindFirstFile関数が速いです。

ファイルの全体検索なんて何回も実行するものでもないので多少の速度差は目をつぶってもいいかなとは思いますが、ここまで差が開くと速い方を使いたくなりますね。

ところでDir関数の欄が真っ白ですね。忘れているわけではないですよ。

実は条件2の対象フォルダ内にUnicode拡張文字を使用したフォルダが存在しています。

Dir関数はUnicode拡張文字が存在していると正常に処理を行うことが出来ません。

次は速度以外のそれぞれの特徴を検証してみたいと思います。

特徴

Dir関数 FileSystemObject FindFirstFile関数
事前準備 不要 参照設定 宣言セクションでの宣言
Unicode文字検索 不可 可能 可能(Unicode版なら)
ファイル・フォルダ判定 必要 不要 必要

まとめ

FileSystemObjectは多機能ですが、FindFirstFile関数に比べてかなり処理速度が遅いです。 (※Dir関数は速いですが処理できないファイルがある点が致命的欠点でパス

機能不足に関してはFindFirstFile関数をクラスに内包して機能を追加してやることである程度回避できるのではないかと考えています。(※機能を追加することで速度が落ちるかもしれないが

個人的にはFindFirstFile関数推しで、今後は使い勝手を考えていきたいと思います。