Jaka jest różnica między Directory.EnumerateFiles
vs GetFiles
?
Oczywiście jeden zwraca tablicę, a drugi zwraca Enumerable.
Coś jeszcze?
Jaka jest różnica między Directory.EnumerateFiles
vs GetFiles
?
Oczywiście jeden zwraca tablicę, a drugi zwraca Enumerable.
Coś jeszcze?
Odpowiedzi:
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()
. Ale EnumerateFiles()
zwraca ten iterator bezpośrednio podczas GetFiles()
budowania List
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.
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.
Array
vs. Enumerable
Twoja odpowiedź jest ogólna dla wszystkich takich sytuacji, ale nie odpowiada na zadane pytanie.