В чем разница между Directory.EnumerateFiles
против GetFiles
?
Очевидно, что один возвращает массив, а другой возвращает Enumerable.
Что-нибудь еще?
В чем разница между Directory.EnumerateFiles
против GetFiles
?
Очевидно, что один возвращает массив, а другой возвращает Enumerable.
Что-нибудь еще?
Ответы:
Из документов :
Методы EnumerateFiles и GetFiles отличаются следующим образом: когда вы используете EnumerateFiles, вы можете начать перечисление коллекции имен до того, как будет возвращена вся коллекция; когда вы используете GetFiles, вы должны подождать, пока весь массив имен будет возвращен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете со многими файлами и каталогами, EnumerateFiles может быть более эффективным.
Таким образом, в основном, EnumerateFiles
возвращает a, IEnumerable
который может быть несколько лениво оценен, тогда как GetFiles
возвращает a, string[]
который должен быть полностью заполнен, прежде чем он сможет вернуться.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. Но EnumerateFiles()
возвращает этот итератор напрямую, пока GetFiles()
строит List
из него лишние и вызывает ToArray()
. Итак, если вы заботитесь о скорости, имеет смысл использовать EnumerateFiles()
и иметь дело с итератором самостоятельно.
EnumerateFiles
возвращает, IEnumerable<string>
и это подразумевает отложенное выполнение. Это доступно только в Fx4 и выше.
При использовании EnumerateFiles вся скорость теряется, если вы затем используете .Last
. Это имеет смысл, конечно, потому что, чтобы добраться до последнего файла, ему нужно будет перечислить все файлы, а затем взять последний.
Тем не менее, использование .First
или .FirstOrDefault
становится очень быстрым, потому что он просто захватывает первый элемент и движется дальше.
Array
против Enumerable
. Ваш ответ является общим для всех таких ситуаций, но не отвечает на заданный вопрос.