概要
using System; using System.Diagnostics; using System.IO; class Program { static void Main() { var path = "【対象のフォルダ】"; var pattern = "【検索パターン】"; var option = SearchOption.AllDirectories; var sw1 = new Stopwatch(); sw1.Start(); var result1 = Directory.GetFiles( path, pattern, option ); sw1.Stop(); var sw2 = new Stopwatch(); sw2.Start(); var result2 = Directory.EnumerateFiles( path, pattern, option ); sw2.Stop(); Console.WriteLine( sw1.Elapsed.TotalSeconds ); Console.WriteLine( sw2.Elapsed.TotalSeconds ); } }
約 10,000 個のファイルを対象に
ファイルの一覧を取得する上記のプログラムを実行したところ
関数 | 処理時間 |
---|---|
Directory.GetFiles | 2.80 秒 |
Directory.EnumerateFiles | 0.08 秒 |
Directory.GetFiles よりも Directory.EnumerateFiles の方が早く終わりました
(Directory.GetFiles は配列を返す分だけ遅くなる)
上記のようにファイルの一覧を取得するだけであれば
Directory.EnumerateFiles の方が早いですが、
using System; using System.Diagnostics; using System.IO; class Program { static void Main() { var path = "【対象のフォルダ】"; var pattern = "【検索パターン】"; var option = SearchOption.AllDirectories; var sw1 = new Stopwatch(); sw1.Start(); var result1 = Directory.GetFiles( path, pattern, option ); foreach ( var s in result1 ) { } sw1.Stop(); var sw2 = new Stopwatch(); sw2.Start(); var result2 = Directory.EnumerateFiles( path, pattern, option ); foreach ( var s in result2 ) { } sw2.Stop(); Console.WriteLine( sw1.Elapsed.TotalSeconds ); Console.WriteLine( sw2.Elapsed.TotalSeconds ); } }
このように、Directory.GetFiles や Directory.EnumerateFiles で取得したファイル一覧を
foreach で参照する部分まで含めて時間を図った場合は
関数 | 処理時間 |
---|---|
Directory.GetFiles | 1.26 秒 |
Directory.EnumerateFiles | 1.19 秒 |
このような結果になりました