【发布时间】:2009-02-12 13:19:42
【问题描述】:
earlier SO question 讨论了如何检索目录树中与多个扩展名之一匹配的所有文件。
例如。检索 C:\ 和所有子目录中的所有文件,匹配 *.log、*.txt、*.dat。
接受的答案是这样的:
var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));
这让我觉得效率很低。如果您在包含数千个文件的目录树上搜索(它使用 SearchOption.AllDirectories),则指定目录树中的每个文件都会加载到内存中,然后才会删除不匹配的内容。 (让我想起了 ASP.NET 数据网格提供的“分页”。)
不幸的是,标准 System.IO.DirectoryInfo.GetFiles 方法一次只接受一个过滤器。
可能只是我缺乏 Linq 知识,我提到的方式实际上效率低下吗?
其次,有没有更有效的方法可以在使用和不使用 Linq 的情况下执行此操作(无需多次调用 GetFiles)?
【问题讨论】:
标签: c# linq performance file