子文件夹上的EnumerateFiles内存效率

时间:2012-04-09 01:12:51

标签: c# .net ienumerable

我有200万个文件分布在分为几年和几个月的子文件夹中。 我正在使用:

循环文件
foreach (string file in Directory.EnumerateFiles(data_path, "*.*", SearchOption.AllDirectories))

我应该期望使用嵌套构造对枚举集进行分区:

foreach (string year_folder in Directory.EnumerateDirectories(data_path))
    foreach (string month_folder in Directory.EnumerateDirectories(year_folder))
        foreach (string file in Directory.EnumerateFiles(month_folder))

会更节省内存吗?

请参阅下面的评论。

1 个答案:

答案 0 :(得分:1)

你的稍微小一些

你提出的解决方案将稍微更多的内存效率,即使只是因为你可以硬编码确实有三个嵌套级别,前两个只是目录,最后一个仅包含文件。

他们的情况略胜一筹

另一方面,Directory.EnumerateFiles()必须为具有任意目录嵌套的一般情况实现解决方案(这将涉及其自己的内部堆栈以跟踪它在枚举中的位置)。

任何一个都没问题,这里有权衡

您的实现会将您的代码绑定到当前的特定目录结构。我有点喜欢能够浏览你的foreach循环并可视化它希望在磁盘上找到的文件夹结构。

另一方面,如果您或您团队中的某个人想要更改目录布局,那将是一件麻烦事。如果您更改目录结构,如果它极不可能更改或更简单以更新代码,那么使用您的方法似乎是安全的。