Jaka jest różnica między Directory.EnumerateFiles
vs GetFiles
?
Oczywiście jeden zwraca tablicę, a drugi zwraca Enumerable.
Coś jeszcze?
Z dokumentów :
Metody EnumerateFiles i GetFiles różnią się w następujący sposób: Korzystając z EnumerateFiles, można rozpocząć wyliczanie kolekcji nazw przed zwróceniem całej kolekcji; gdy używasz GetFiles, musisz poczekać, aż cała tablica nazw zostanie zwrócona, zanim uzyskasz dostęp do tablicy. Dlatego podczas pracy z wieloma plikami i katalogami EnumerateFiles może być bardziej wydajne.
Zasadniczo EnumerateFiles
zwraca wartość, IEnumerable
która może być nieco leniwie oceniana, podczas gdy GetFiles
zwraca wartość a, string[]
która musi być w pełni wypełniona, zanim będzie mogła powrócić.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. AleEnumerateFiles()
zwraca ten iterator bezpośrednio podczasGetFiles()
budowaniaList
z niego i wywołańToArray()
. Jeśli więc zależy Ci na szybkości, warto używaćEnumerateFiles()
iteratora i zająć się nim samodzielnie.EnumerateFiles
zwraca,IEnumerable<string>
a to oznacza odroczone wykonanie. Jest dostępny tylko w Fx4 i nowszych.źródło
Podczas korzystania z EnumerateFiles cała prędkość jest tracona, jeśli używasz
.Last
. Ma to oczywiście sens, ponieważ aby dostać się do ostatniego pliku, trzeba będzie wyliczyć wszystkie pliki, a następnie pobrać ostatni.Jednak użycie
.First
lub.FirstOrDefault
staje się bardzo szybkie, ponieważ po prostu chwyta pierwszy przedmiot i przechodzi dalej.źródło
Array
vs.Enumerable
Twoja odpowiedź jest ogólna dla wszystkich takich sytuacji, ale nie odpowiada na zadane pytanie.