¿Cuál es la diferencia entre Directory.EnumerateFiles
vs GetFiles
?
Obviamente, uno devuelve una matriz y el otro devuelve Enumerable.
¿Algo más?
¿Cuál es la diferencia entre Directory.EnumerateFiles
vs GetFiles
?
Obviamente, uno devuelve una matriz y el otro devuelve Enumerable.
¿Algo más?
Respuestas:
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()
. Pero EnumerateFiles()
devuelve este iterador directamente mientras GetFiles()
construye extra List
y llama ToArray()
. Por lo tanto, si le importa la velocidad, tiene sentido usar EnumerateFiles()
y lidiar con el iterador usted mismo.
EnumerateFiles
devuelve IEnumerable<string>
y eso implica ejecución diferida. Solo está disponible en Fx4 y superiores.
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.
Array
vsEnumerable
aspectoSu respuesta es genérica para todas esas situaciones, pero no responde la pregunta formulada.