LINQ 查询不选择文件

LINQ Query Not Selecting Files

我正在尝试使用 LINQ 查询一组文件,我可以在其中找到包含特定字符串的文件名。

我正在使用:

var docs = directory.enumerateFiles(searchFolder, "* " + strNumber+ "*", SearchOption.AllDirectories);

这工作正常,但由于其中一个目录有超过 100 万个文件,我的一些文件搜索花费了 30 多分钟。我希望通过 PLINQ 查询加快搜索过程。然而,虽然我的语法很好,但我没有得到我期望的结果。看起来我的问题可能出在 Where 语句中。任何帮助都会有所帮助。

foreach (strNumber in strNumbers) 
{
    DirectoryInfo searchDirectory = new DirectoryInfo(searchFolder);
    IEnumerable<System.IO.FileInfo> allDocs = searchDirectory.EnumerateFiles("*", SearchOPtion.AllDirectories);

    IEnumerable<System.IO.FileInfo> docsToProcess = strNumbers
        .SelectMany(strNumber => allDocs
        .Where(file => file.Name.Contains(strNumber)))
        .Distinct();
}

如有任何帮助,我们将不胜感激。

我会改变问题的顺序。

  1. 创建所有文件的列表(存入内存)
  2. 对内存列表执行搜索

然后,您可以在内存阵列上使用并行 Foreach,并且您的磁盘使用仅限于初始搜索。

var searchDirectory = new DirectoryInfo(searchFolder);
var allDocs = searchDirectory.EnumerateFiles("*", SearchOPtion.AllDirectories).ToArray();

// For extra points, use a Parallel.ForEach here for multi-threaded work
Parallel.Foreach(strNumbers, strNumber => 
{
   // Work on allDocs here, it should be in memory
});