Enumerando arquivos e diretórios


Algumas classes que estão contidas no namespace System.IO trabalham com arrays de strings. Para citar alguns exemplos, temos as classes Directory e DirectoryInfo, que fornecem dois métodos chamados GetDirectories e GetFiles. Ambos os métodos retornam um array de strings, representando os sub-diretórios ou os arquivos que constam dentro de um determinado diretório.

Além disso, temos também a classe estática File, que possui os métodos ReadAllLines e WriteAllLines, utilizados para ler e escrever linhas em um arquivo, respectivamente. O primeiro método retorna um array de strings, e o segundo recebe também um array de strings.

Para os métodos que retornam array de strings, é necessário criar, alocar a memória e, finalmente, preenchê-lo. Somente depois de todo esse processo, é que iremos conseguir acessar os elementos. Em cenários onde você tem poucos arquivos/sub-diretórios, você não deverá ter maiores problemas com performance. E enquanto estiver manipulando arquivos pequenos, você também não notará um baixo desempenho, causado pelo overhead dos arrays.

A performance começa a ser degradada a partir do momento que você está extraindo informações a partir de um diretório (local ou remoto), com muitos objetos. Já no caso da manipulação do conteúdo do arquivo, podemos sofrer quando há muitas informações a serem lidas e/ou escritas. Visando amenizar esses problemas, a Microsoft inseriu novos métodos na BCL do .NET 4.0.

Agora as classes Directory e DirectoryInfo passam a ter dois novos métodos EnumerateDirectories e EnumerateFiles, que ao invés de trabalhar com arrays de strings como os métodos citados acima, passam a retornar classes que implementam a interface IEnumerable<string>. Já no caso dos métodos ReadAllLines e WriteAllLines, apenas um novo overload foi criado para suportar também o IEnumerable<string>. Todos esses métodos removem a necessidade de criar e alocar um array potencialmente grande, trabalhando sob demanda, e permitindo o acesso imediato, sem a necessidade de aguardar que o array seja criado, carregado e retornado.

Um comentário sobre “Enumerando arquivos e diretórios

Deixe uma resposta