我正在从.NET应用程序中搜索大量(〜500,000)文件夹中的大量(〜200,000)文件。

我希望使用DirectoryInfo.GetFiles,传入SearchOption.AllDirectories。但是,这种方法似乎比编写我自己的代码来遍历目录并仅传递GetFiles来执行searchPattern慢得多。

相关的MSDN info:

  • GetFiles(String)从当前目录返回与给定searchPattern匹配的文件列表。
  • GetFiles(String, SearchOption)从当前目录返回与给定searchPattern匹配的文件列表,并使用一个值确定是否搜索子目录。

  • 有人有类似的经历吗?

    最佳答案

    这两个功能实际上因其性能而臭名昭著。原因是GetFiles遍历整个目录树并构造一个FileInfo对象数组,然后才将结果返回给调用方。所述数组的构造涉及大量内存分配(我确定它们在内部使用List,但仍然使用),因为无法提前知道条目的数量。

    如果您确实热衷于性能,则可以P/调用FindFirstFile/FindNextFile/FindClose,一次将它们抽象为IEnumerable<FileInfo>yield FileInfo

    09-26 23:46