我们有没有理由在Directory.EnumerateFiles()上使用Directory.GetFiles()?

Sam*_*IAm 6 c#

我不知道为什么我们会使用它Directory.GetFiles,如果Directory.EnumerateFiles能够做同样的事情,你甚至可以在返回找到的整个目录列表之前枚举列表.

Directory.EnumerateFiles与Directory.GetFiles有什么区别?

为什么,现在EnumerateFiles有可能需要使用GetFiles

Ale*_*exD 10

根据http://msdn.microsoft.com/en-us/library/07wt70x2%28v=vs.110%29.aspx:

EnumerateFiles和GetFiles方法的不同之处如下:当您使用EnumerateFiles时,您可以在返回整个集合之前开始枚举名称集合; 当您使用GetFiles时,您必须等待返回整个名称数组,然后才能访问该数组.因此,当您使用许多文件和目录时,EnumerateFiles可以更高效.

我想GetFiles可以被认为是一种便利功能.

  • @dwerner:实际上,查看[参考代码](http://referencesource.microsoft.com/mscorlib/R/0e5cd32f1daea6e5.html),`GetFiles()`最终会调用等效的`EnumerateFiles`(如果我正在阅读正确),然后调用:`new List <String>(fileIterator).ToArray()`.如果我理解正确,这会产生_two_O(n)次操作,而`EnumerateFiles().ToList()`只产生_one_. (3认同)

Des*_*tar 8

您使用正确的工具来完成正确的工作.如果您有少量文件,那么您可能只想使用Directory.GetFiles()它们并将它们加载到内存中.

Directory.EnumerateFiles() 另一方面,当您需要通过一次枚举一个文件来节省内存时.

这类似于是否使所有内容变得 懒惰,或者只是在适当时使用它.我认为这有助于把事情放在眼里,因为没有任何理由让一切都变得懒惰是有点过分的.

你有简单与效率的权衡.从概念上讲,实际上不包含文件但一次生成一个文件的枚举器比字符串数组更复杂.能够将该枚举器存储在一个IEnumerable<string>是一个很好的抽象,但重点仍然是.

预测性能可能也更困难.随着GetFiles()你知道什么时候该方法被称为性能成本费用.EnumerateFiles()在枚举之前不做任何事情.

意图很重要.如果你EnumerateFiles()在一个你知道没有那么多文件的目录上使用,那么你只是盲目地使用它而不理解.代码运行的计算机也很重要.如果我在具有24 GB RAM的服务器上运行某些东西,那么我可能更有可能使用内存耗尽的方法,就像GetFiles()我在具有1 GB RAM的服务器上一样.

如果您不知道将会有多少文件或不确定代码将在何种环境中运行,那么谨慎行事并使用内存高效版本是明智之举.

需要考虑许多变量,优秀的程序员会考虑这些因素并有目的地做事.