我不确定为什么我们要使用Directory.GetFiles
,因为Directory.EnumerateFiles
能够完成相同的任务,并且您可以在返回找到的目录列表之前枚举该列表。
Directory.EnumerateFiles和Directory.GetFiles之间有什么区别?
既然有了EnumerateFiles
,为什么还需要使用GetFiles
呢?
我不确定为什么我们要使用Directory.GetFiles
,因为Directory.EnumerateFiles
能够完成相同的任务,并且您可以在返回找到的目录列表之前枚举该列表。
Directory.EnumerateFiles和Directory.GetFiles之间有什么区别?
既然有了EnumerateFiles
,为什么还需要使用GetFiles
呢?
EnumerateFiles和GetFiles方法的区别如下:使用枚举文件时,你可以在整个集合返回之前开始枚举名称集合;而当你使用GetFiles方法时,必须等待整个名称数组返回后才能访问该数组。因此,当你处理多个文件和目录时,使用EnumerateFiles更有效率。
我猜GetFiles
可被认为是一个便利函数。
GetFiles()
等同于 EnumerateFiles().ToList()
。 - dwernerGetFiles()
最终调用了等效的EnumerateFiles
(如果我理解正确的话),然后调用:new List<String>(fileIterator).ToArray()
。如果我理解正确,这将产生_两个_ O(n) 操作,而EnumerateFiles().ToList()
只会产生一个。 - Chris SinclairDirectory.GetFiles()
并将它们加载到内存中。Directory.EnumerateFiles()
。IEnumerable<string>
中是一个很好的抽象,但问题依然存在。GetFiles()
时,你知道性能成本发生在调用该方法时。EnumerateFiles()
在枚举之前不会执行任何操作。EnumerateFiles()
,那么您只是盲目地使用它而没有理解。计算机代码运行的环境也很重要。如果我在一台拥有24 GB RAM的服务器上运行某些东西,那么我可能更有可能使用像GetFiles()
这样消耗内存的方法,而不是在一台只有1 GB RAM的服务器上运行。
GetFiles
是为了向后兼容而存在的。它最初出现在1.0版的.NET框架中。EnumerateFiles
则是在之后的版本中引入的——如果我没记错的话,应该是4.0或4.5。 - EnigmativityGetFiles
是在2.0中引入的,而EnumerateFiles
是在4.0中引入的。 - Despertar