¿Cuál es la diferencia entre Directory.EnumerateFilesvs GetFiles?
Obviamente, uno devuelve una matriz y el otro devuelve Enumerable.
¿Algo más?
¿Cuál es la diferencia entre Directory.EnumerateFilesvs 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, 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(). Pero EnumerateFiles()devuelve este iterador directamente mientras GetFiles()construye extra Listy llama ToArray(). Por lo tanto, si le importa la velocidad, tiene sentido usar EnumerateFiles()y lidiar con el iterador usted mismo.
EnumerateFilesdevuelve 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 .Firsto se .FirstOrDefaultvuelve muy rápido, porque simplemente toma el primer elemento y sigue adelante.
ArrayvsEnumerable aspectoSu respuesta es genérica para todas esas situaciones, pero no responde la pregunta formulada.