Jaka jest różnica między Directory.EnumerateFilesvs GetFiles?
Oczywiście jeden zwraca tablicę, a drugi zwraca Enumerable.
Coś jeszcze?
Jaka jest różnica między Directory.EnumerateFilesvs 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 EnumerateFileszwraca wartość, IEnumerablektóra może być nieco leniwie oceniana, podczas gdy GetFileszwraca 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 Listz 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.
EnumerateFileszwraca, 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 .Firstlub .FirstOrDefaultstaje się bardzo szybkie, ponieważ po prostu chwyta pierwszy przedmiot i przechodzi dalej.
Arrayvs. EnumerableTwoja odpowiedź jest ogólna dla wszystkich takich sytuacji, ale nie odpowiada na zadane pytanie.