如何读取或写入数百万个目录?

时间:2014-02-23 05:24:56

标签: c# directory

我有一个程序可以节省大约300万个目录并读取或写入它们但是当我想用Directory.GetDirectories(SourcEDirectorY.Text, "*", SearchOption.AllDirectories)保存它时它就没有响应。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:5)

而不是Directory.GetDirectories,请致电Directory.EnumerateDirectories

有什么区别? EnumerateDirectories返回IEnumerable<string>,而GetDirectories返回字符串数组:string[]

所以,如果你这样做:

foreach (var dir in Directory.GetDirectories(...))
{
}

然后您最终会等待,直到从磁盘读取整个目录条目数组。与EnumerateDirectories对比:

foreach (var dir in Directory.EnumerateDirectories(...))
{
}

立即返回第一个目录,您可以对其进行处理。每次循环时,都会返回另一个目录名。因此,不是在前面构建整个阵列,而是大致永久地建立整个阵列,而是在找到目录时一次获得一个目录。

这最终会提高内存效率,因为它不需要构建大量的目录条目。更重要的是,显示更快,因为您立即开始获得结果。它实际上是更快还是更慢是一个开放的问题,取决于许多不同的事情。如果它的速度不同,它可能只有一点点的方式。如果你正在做三百万个目录的重要事情,那当然不够重要。