Was ist der Unterschied zwischen Directory.EnumerateFilesvs GetFiles?
Offensichtlich gibt einer ein Array zurück und der andere Enumerable.
Noch etwas?
Was ist der Unterschied zwischen Directory.EnumerateFilesvs GetFiles?
Offensichtlich gibt einer ein Array zurück und der andere Enumerable.
Noch etwas?
Antworten:
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 EnumerateFileseine zurück, IEnumerabledie etwas träge ausgewertet werden kann, während GetFileseine zurückgegeben string[]wird, die vollständig ausgefüllt sein muss, bevor sie zurückkehren kann.
FileSystemEnumerableFactory.CreateFileInfoIterator(). Aber EnumerateFiles()gebe diesen Iterator direkt während GetFiles()baut zusätzliche Listvon ihm und Anrufen ToArray(). Wenn Sie also Wert auf Geschwindigkeit legen, ist es sinnvoll, EnumerateFiles()den Iterator selbst zu verwenden und damit umzugehen.
EnumerateFileskehrt zurück IEnumerable<string>und dies impliziert eine verzögerte Ausführung. Es ist nur in Fx4 und höher verfügbar.
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 .Firstoder .FirstOrDefaultwird jedoch sehr schnell, da es einfach den ersten Gegenstand ergreift und weitergeht.
Arrayvs- EnumerableAspekt gab. Ihre Antwort ist allgemein für alle derartigen Situationen, beantwortet jedoch nicht die gestellte Frage.