В чем разница между Directory.EnumerateFiles и Directory.GetFiles? - PullRequest
124 голосов
/ 15 апреля 2011

В чем разница между Directory.EnumerateFiles против GetFiles?

Очевидно, один возвращает массив, а другой возвращает Enumerable.

Что-нибудь еще?

Ответы [ 3 ]

147 голосов
/ 15 апреля 2011

С документы :

Методы EnumerateFiles и GetFiles отличаются следующим образом: когда вы используете EnumerateFiles, вы можете начать перечисление коллекции имен до того, как будет возвращена вся коллекция; когда вы используете GetFiles, вы должны подождать, пока весь массив имен будет возвращен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете со многими файлами и каталогами, EnumerateFiles может быть более эффективным.

Таким образом, в принципе, EnumerateFiles возвращает IEnumerable, который может быть несколько лениво оценен, тогда как GetFiles возвращает string[], который должен быть полностью заполнен, прежде чем он сможет вернуться.

29 голосов
/ 15 апреля 2011

EnumerateFiles возвращает IEnumerable<string>, что подразумевает отложенное выполнение.Это доступно только в Fx4 и выше.

15 голосов
/ 11 июня 2014

При использовании EnumerateFiles вся скорость теряется, если вы затем используете .Last. Это, конечно, имеет смысл, поскольку для перехода к последнему файлу потребуется перечислить все файлы, а затем взять последний.

Тем не менее, использование .First или .FirstOrDefault становится очень быстрым, потому что он просто берет первый элемент и движется дальше.

...