Qual é a diferença entre Directory.EnumerateFiles
vs GetFiles
?
Obviamente, um retorna uma matriz e o outro retorna Enumerable.
Algo mais?
Qual é a diferença entre Directory.EnumerateFiles
vs GetFiles
?
Obviamente, um retorna uma matriz e o outro retorna Enumerable.
Algo mais?
Respostas:
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()
. Mas EnumerateFiles()
retorna esse iterador diretamente enquanto GetFiles()
cria extra List
e chama ToArray()
. Portanto, se você se preocupa com a velocidade, faz sentido usar EnumerateFiles()
e lidar com o iterador.
EnumerateFiles
retorna IEnumerable<string>
e isso implica execução adiada. Está disponível apenas em Fx4 e superior.
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.
Array
vs. Enumerable
Sua resposta é genérica para todas essas situações, mas não responde à pergunta.