1

我有 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))

内存效率会更高吗?

另请参阅下面的评论。

4

1 回答 1

1

你的稍微小一点

您提出的解决方案将稍微提高内存效率,即使只是因为您可以硬编码以下事实,即恰好存在三个嵌套级别,前两个仅是目录,最后一个仅包含文件。

他们的更一般

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

任何一个都可以,这是权衡取舍

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

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

于 2012-04-09T01:32:14.650 回答