2

ファイル検索を改善する方法を探しています。

現在、私はこのメソッドを使用しています:

public IEnumerable<FileInfo> FindFilesInDirectory(string dirPath, string searchName)
{
    return Directory.Exists(dirPath)
               ? Directory.GetFiles(dirPath, "*.*", SearchOption.AllDirectories)
                          .ToList()
                          .ConvertAll(x => new FileInfo(x))
                          .Where(x => x.Name.ToLower().Contains(searchName.ToLower()))
               : null;
}

これを行うためのより高速またはより良い方法はありますか?

ありがとう

4

5 に答える 5

3

ただし、ほぼマイクロ最適化により、読みやすさを向上させたり、例外処理を追加したりできます。

EnumerateFilesフィルタリングを開始する前にすべてをメモリにロードする必要がない (可能であれば)も使用する必要があります。また、より効率的でエラーが発生しにくいため、代わりにEqualswithを使用してください (トルコのテスト)。 StringComparison.OrdinalIgnoreCaseToLower

public IEnumerable<FileInfo> FindFilesInDirectory(string dirPath, string searchName)
{
    if (Directory.Exists(dirPath))
    {
        var dir = new DirectoryInfo(dirPath);
        return dir.EnumerateFiles("*.*", SearchOption.AllDirectories)
                  .Where(fi => fi.Name.Equals(searchName, StringComparison.OrdinalIgnoreCase));
    }
    else
        throw new ArgumentException("Directory doesn't exist.", dirPath);
}
于 2013-07-02T10:01:32.220 に答える
3

特定のパターンを検索するオーバーロードがあります。*.*検索パターン パラメータを使用して、関心のあるファイル名を検索する代わりに検索します。

Directory.GetFiles(dirPath, "*" + searchName + "*", SearchOption.AllDirectories);
于 2013-07-02T09:58:23.953 に答える
1
return Directory.Exists(dirPath)
           ? Directory.EnumerateFiles(
                dirPath, 
                string.Format("*{0}*",searchName), 
                SearchOption.AllDirectories)
              .Select(x => new FileInfo(x))
           : null;
于 2013-07-02T09:59:34.663 に答える
0
public IEnumerable<FileInfo> FindFilesInDirectory(string dirPath, string searchName)
{
    return Directory.Exists(dirPath)
               ? Directory.GetFiles(dirPath, "*" + searchName + "*", SearchOption.AllDirectories)
                          .Select(x => new FileInfo(x))
               : null;
}
于 2013-07-02T10:02:02.743 に答える
0

結果で何をしているのかわかりませんが、メソッドでのクエリの実行は、実装するまで延期されることに言及する価値があると思います。そのため、クエリで何をしているかによっては、実行が遅くなる可能性があります。これが意図されていない場合は、 .toList() を追加して、すぐに実行できるようにリストを返します。

于 2013-07-02T10:12:09.943 に答える