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