¿Cuál es la diferencia entre Directory.EnumerateFiles
vs GetFiles
?
Obviamente, uno devuelve una matriz y el otro devuelve Enumerable.
¿Algo más?
De los documentos :
Los métodos EnumerateFiles y GetFiles difieren de la siguiente manera: cuando usa EnumerateFiles, puede comenzar a enumerar la colección de nombres antes de que se devuelva toda la colección; cuando usa GetFiles, debe esperar a que se devuelva toda la matriz de nombres antes de poder acceder a la matriz. Por lo tanto, cuando trabaja con muchos archivos y directorios, EnumerateFiles puede ser más eficiente.
Básicamente, EnumerateFiles
devuelve un IEnumerable
que puede evaluarse perezosamente de alguna manera, mientras que GetFiles
devuelve un string[]
que debe estar completamente poblado antes de que pueda regresar.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. PeroEnumerateFiles()
devuelve este iterador directamente mientrasGetFiles()
construye extraList
y llamaToArray()
. Por lo tanto, si le importa la velocidad, tiene sentido usarEnumerateFiles()
y lidiar con el iterador usted mismo.EnumerateFiles
devuelveIEnumerable<string>
y eso implica ejecución diferida. Solo está disponible en Fx4 y superiores.fuente
Al usar EnumerateFiles, toda la velocidad se pierde si está usando
.Last
. Esto tiene sentido, por supuesto, porque para llegar al último archivo, tendrá que enumerar todos los archivos y luego tomar el último.Sin embargo, usar
.First
o se.FirstOrDefault
vuelve muy rápido, porque simplemente toma el primer elemento y sigue adelante.fuente
Array
vsEnumerable
aspectoSu respuesta es genérica para todas esas situaciones, pero no responde la pregunta formulada.