我正在从.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
。