Qual'è la differenza tra Directory.EnumerateFilesvs GetFiles?
Ovviamente uno restituisce un array e l'altro restituisce Enumerable.
Qualunque altra cosa?
Qual'è la differenza tra Directory.EnumerateFilesvs 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, EnumerateFilesrestituisce un valore IEnumerableche può essere valutato pigramente, mentre GetFilesrestituisce 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 Liste chiama ToArray(). Quindi, se ti preoccupi della velocità, ha senso usare EnumerateFiles()e gestire l'iteratore da solo.
EnumerateFilesritorna 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 .Firsto .FirstOrDefaultdiventa molto veloce, perché prende semplicemente il primo oggetto e va avanti.
Arrayvs. EnumerableLa tua risposta è generica per tutte queste situazioni ma non risponde alla domanda posta.