我有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))
会更节省内存吗?
请参阅下面的评论。
答案 0 :(得分:1)
你的稍微小一些
你提出的解决方案将稍微更多的内存效率,即使只是因为你可以硬编码确实有三个嵌套级别,前两个只是目录,最后一个仅包含文件。
他们的情况略胜一筹
另一方面,Directory.EnumerateFiles()
必须为具有任意目录嵌套的一般情况实现解决方案(这将涉及其自己的内部堆栈以跟踪它在枚举中的位置)。
任何一个都没问题,这里有权衡
您的实现会将您的代码绑定到当前的特定目录结构。我有点喜欢能够浏览你的foreach循环并可视化它希望在磁盘上找到的文件夹结构。
另一方面,如果您或您团队中的某个人想要更改目录布局,那将是一件麻烦事。如果您做更改目录结构,如果它极不可能更改或更简单以更新代码,那么使用您的方法似乎是安全的。