Яка різниця між Directory.EnumerateFilesvs GetFiles?
Очевидно, один повертає масив, а інший повертає Численні.
Щось іще?
Яка різниця між Directory.EnumerateFilesvs 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стає дуже швидким, тому що він просто хапає перший предмет і рухається далі.
Arrayvs. EnumerableВаша відповідь є загальною для всіх таких ситуацій, але не відповідає на поставлене запитання.