¿Cuál es la diferencia entre Directory.EnumerateFilesvs 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, EnumerateFilesdevuelve un IEnumerableque puede evaluarse perezosamente de alguna manera, mientras que GetFilesdevuelve un string[]que debe estar completamente poblado antes de que pueda regresar.
FileSystemEnumerableFactory.CreateFileInfoIterator(). PeroEnumerateFiles()devuelve este iterador directamente mientrasGetFiles()construye extraListy llamaToArray(). Por lo tanto, si le importa la velocidad, tiene sentido usarEnumerateFiles()y lidiar con el iterador usted mismo.EnumerateFilesdevuelveIEnumerable<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
.Firsto se.FirstOrDefaultvuelve muy rápido, porque simplemente toma el primer elemento y sigue adelante.fuente
ArrayvsEnumerableaspectoSu respuesta es genérica para todas esas situaciones, pero no responde la pregunta formulada.