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