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

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

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

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

3 ответа

Решение

Из документов:

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

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

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

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

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

Другие вопросы по тегам