Qual é a diferença entre Directory.EnumerateFiles
vs GetFiles
?
Obviamente, um retorna uma matriz e o outro retorna Enumerable.
Algo mais?
Dos documentos :
Os métodos EnumerateFiles e GetFiles diferem da seguinte maneira: Quando você usa EnumerateFiles, pode começar a enumerar a coleção de nomes antes que a coleção inteira seja retornada; ao usar GetFiles, você deve aguardar o retorno de toda a matriz de nomes antes de poder acessar a matriz. Portanto, quando você estiver trabalhando com muitos arquivos e diretórios, EnumerateFiles pode ser mais eficiente.
Então, basicamente, EnumerateFiles
retornos IEnumerable
que podem ser avaliados de alguma forma preguiçosamente, enquanto GetFiles
retornos string[]
que precisam ser totalmente preenchidos antes que possam retornar.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. MasEnumerateFiles()
retorna esse iterador diretamente enquantoGetFiles()
cria extraList
e chamaToArray()
. Portanto, se você se preocupa com a velocidade, faz sentido usarEnumerateFiles()
e lidar com o iterador.EnumerateFiles
retornaIEnumerable<string>
e isso implica execução adiada. Está disponível apenas em Fx4 e superior.fonte
Ao usar EnumerateFiles, toda a velocidade será perdida se você estiver usando
.Last
. Isso faz sentido, é claro, porque para chegar ao último arquivo, ele precisará enumerar todos os arquivos e pegar o último.No entanto, usar
.First
ou.FirstOrDefault
se torna muito rápido, porque simplesmente pega o primeiro item e segue em frente.fonte
Array
vs.Enumerable
Sua resposta é genérica para todas essas situações, mas não responde à pergunta.