В чем разница между Directory.EnumerateFiles
против GetFiles
?
Очевидно, что один возвращает массив, а другой возвращает Enumerable.
Что-нибудь еще?
Из документов :
Методы EnumerateFiles и GetFiles отличаются следующим образом: когда вы используете EnumerateFiles, вы можете начать перечисление коллекции имен до того, как будет возвращена вся коллекция; когда вы используете GetFiles, вы должны подождать, пока весь массив имен будет возвращен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете со многими файлами и каталогами, EnumerateFiles может быть более эффективным.
Таким образом, в основном, EnumerateFiles
возвращает a, IEnumerable
который может быть несколько лениво оценен, тогда как GetFiles
возвращает a, string[]
который должен быть полностью заполнен, прежде чем он сможет вернуться.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. НоEnumerateFiles()
возвращает этот итератор напрямую, покаGetFiles()
строитList
из него лишние и вызываетToArray()
. Итак, если вы заботитесь о скорости, имеет смысл использоватьEnumerateFiles()
и иметь дело с итератором самостоятельно.EnumerateFiles
возвращает,IEnumerable<string>
и это подразумевает отложенное выполнение. Это доступно только в Fx4 и выше.источник
При использовании EnumerateFiles вся скорость теряется, если вы затем используете
.Last
. Это имеет смысл, конечно, потому что, чтобы добраться до последнего файла, ему нужно будет перечислить все файлы, а затем взять последний.Тем не менее, использование
.First
или.FirstOrDefault
становится очень быстрым, потому что он просто захватывает первый элемент и движется дальше.источник
Array
противEnumerable
. Ваш ответ является общим для всех таких ситуаций, но не отвечает на заданный вопрос.