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