В чем разница между 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 становится очень быстрым, потому что оно просто захватывает первый элемент и перемещается.