В чем разница между Directory.EnumerateFiles и Directory.GetFiles?
В чем разница между Directory.EnumerateFiles
vs GetFiles
?
Очевидно, что один возвращает массив, а другой возвращает Enumerable.
Что-нибудь еще?
Ответы
Ответ 1
От документы:
Методы EnumerateFiles и GetFiles отличаются следующим образом: когда вы используете EnumerateFiles, вы можете начать перечисление коллекции имен до возвращения всей коллекции; когда вы используете GetFiles, вы должны дождаться возвращения всего массива имен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете со многими файлами и каталогами, EnumerateFiles может быть более эффективным.
В принципе, EnumerateFiles
возвращает IEnumerable
, который можно лениво оценивать, а GetFiles
возвращает string[]
, который должен быть полностью заполнен, прежде чем он сможет вернуться.
Ответ 2
EnumerateFiles
возвращает IEnumerable<string>
, что подразумевает отсроченное выполнение. Он доступен только в формате Fx4 и выше.
Ответ 3
При использовании EnumerateFiles вся скорость теряется, если вы используете .Last
. Это, конечно, имеет смысл, потому что для перехода к последнему файлу нужно будет перечислить все файлы, а затем захватить последний.
Однако использование .First
или .FirstOrDefault
становится очень быстрым, потому что оно просто захватывает первый элемент и перемещается.