Qual'è la differenza tra Directory.EnumerateFiles
vs GetFiles
?
Ovviamente uno restituisce un array e l'altro restituisce Enumerable.
Qualunque altra cosa?
Qual'è la differenza tra Directory.EnumerateFiles
vs GetFiles
?
Ovviamente uno restituisce un array e l'altro restituisce Enumerable.
Qualunque altra cosa?
Risposte:
Dai documenti :
I metodi EnumerateFiles e GetFiles differiscono come segue: Quando si utilizza EnumerateFiles, è possibile iniziare a enumerare la raccolta di nomi prima che venga restituita l'intera raccolta; quando si utilizzano GetFiles, è necessario attendere la restituzione dell'intero array di nomi prima di poter accedere all'array. Pertanto, quando si lavora con molti file e directory, EnumerateFiles può essere più efficiente.
Quindi, in sostanza, EnumerateFiles
restituisce un valore IEnumerable
che può essere valutato pigramente, mentre GetFiles
restituisce un valore string[]
che deve essere completamente popolato prima di poter tornare.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. Ma EnumerateFiles()
restituisce questo iteratore direttamente mentre ne GetFiles()
ricava un extra List
e chiama ToArray()
. Quindi, se ti preoccupi della velocità, ha senso usare EnumerateFiles()
e gestire l'iteratore da solo.
EnumerateFiles
ritorna IEnumerable<string>
e ciò implica l'esecuzione differita. È disponibile solo in Fx4 e versioni successive.
Quando si utilizzano EnumerateFiles, tutta la velocità si perde se si utilizza quindi .Last
. Questo ha ovviamente senso, perché per arrivare all'ultimo file, sarà necessario enumerare tutti i file, quindi prendere l'ultimo.
Tuttavia, l'utilizzo .First
o .FirstOrDefault
diventa molto veloce, perché prende semplicemente il primo oggetto e va avanti.
Array
vs. Enumerable
La tua risposta è generica per tutte queste situazioni ma non risponde alla domanda posta.