Was ist der Unterschied zwischen Directory.EnumerateFiles
vs GetFiles
?
Offensichtlich gibt einer ein Array zurück und der andere Enumerable.
Noch etwas?
Aus den Dokumenten :
Die Methoden EnumerateFiles und GetFiles unterscheiden sich wie folgt: Wenn Sie EnumerateFiles verwenden, können Sie mit der Aufzählung der Namenssammlung beginnen, bevor die gesamte Sammlung zurückgegeben wird. Wenn Sie GetFiles verwenden, müssen Sie warten, bis das gesamte Array von Namen zurückgegeben wird, bevor Sie auf das Array zugreifen können. Wenn Sie mit vielen Dateien und Verzeichnissen arbeiten, kann EnumerateFiles daher effizienter sein.
Gibt also im Grunde EnumerateFiles
eine zurück, IEnumerable
die etwas träge ausgewertet werden kann, während GetFiles
eine zurückgegeben string[]
wird, die vollständig ausgefüllt sein muss, bevor sie zurückkehren kann.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. AberEnumerateFiles()
gebe diesen Iterator direkt währendGetFiles()
baut zusätzlicheList
von ihm und AnrufenToArray()
. Wenn Sie also Wert auf Geschwindigkeit legen, ist es sinnvoll,EnumerateFiles()
den Iterator selbst zu verwenden und damit umzugehen.EnumerateFiles
kehrt zurückIEnumerable<string>
und dies impliziert eine verzögerte Ausführung. Es ist nur in Fx4 und höher verfügbar.quelle
Bei Verwendung von EnumerateFiles geht die gesamte Geschwindigkeit verloren, wenn Sie dann verwenden
.Last
. Dies ist natürlich sinnvoll, da zum Aufrufen der letzten Datei alle Dateien aufgelistet und dann die letzte abgerufen werden müssen.Die Verwendung von
.First
oder.FirstOrDefault
wird jedoch sehr schnell, da es einfach den ersten Gegenstand ergreift und weitergeht.quelle
Array
vs-Enumerable
Aspekt gab. Ihre Antwort ist allgemein für alle derartigen Situationen, beantwortet jedoch nicht die gestellte Frage.