Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举子文件夹上的文件内存效率_C#_.net_Ienumerable - Fatal编程技术网

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

C# 枚举子文件夹上的文件内存效率,c#,.net,ienumerable,C#,.net,Ienumerable,我有200万个文件分布在分为年和月的子文件夹中。 我使用以下方法循环浏览文件: foreach (string file in Directory.EnumerateFiles(data_path, "*.*", SearchOption.AllDirectories)) 我是否应该期望通过使用嵌套构造对枚举集进行分区: foreach (string year_folder in Directory.EnumerateDirectories(data_path)) foreach (

我有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循环,并可视化它希望在磁盘上找到的文件夹结构


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

您的方法稍微小一点

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

他们的略为一般

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

任何一个都可以,以下是折衷方案

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


另一方面,如果您或您的团队中有人想要更改目录布局,这将是一个麻烦。如果不太可能更改它,或者如果您确实更改了目录结构,那么更新代码就足够简单,那么使用您的方法似乎是安全的。

我非常希望听到结果,如果您找到一种更有效的方法,我会将其添加到我的fluent System.IO Wrapper中。您应该尝试这两种方法并找出答案;您已经在这两种情况下编写了代码,因此只需分析每种情况的运行情况,您就可以确定了。即使其他人从理论上说哪个更好,也很难从理论上说哪个更好。我试图理解的是,IEnumerable集合在循环遍历最后一个元素之前是否占用内存(证明第二种方法是正确的),或者在循环中是否更频繁地进行垃圾收集(然后这两种方法是相似的)谢谢@Gabe,你能为我提供一个参考吗?我真的很想听到这个结果,如果你找到一个更有效的方法,我会把它添加到我的fluent System.IO Wrapper中。你应该尝试这两种方法并找出答案;您已经在这两种情况下编写了代码,因此只需分析每种情况的运行情况,您就可以确定了。即使其他人从理论上说哪个更好,也很难从理论上说哪个更好。我试图理解的是,IEnumerable集合在循环遍历最后一个元素之前是否占用内存(证明第二种方法是正确的),或者在循环中是否更频繁地进行垃圾收集(然后这两种方法是相似的)谢谢@Gabe,你能提供一个参考吗?