枚举子文件夹上的文件内存效率

本文关键字:文件 内存 效率 文件夹 枚举 | 更新日期: 2023-09-27 18:30:39

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

会更节省内存吗?

另请参阅下面的评论。

枚举子文件夹上的文件内存效率

你的稍微小一点

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

他们的稍微一般一些

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

任何一个都很好,这是权衡

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

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