Fórum Problema ao ter de inspecionar grande quantidade de arquivos criados em diretório #527267
29/07/2015
0
Porém existe uma preocupação quanto a performance, nesse cenário é possível que ao mandar popular esse array "arquivos = diretorio.listFiles" existam muitos arquivos no diretório sendo scaneado, muitos mesmo, na casa de milhões por exemplo, podendo assim estourar a memória etc. Alguem ai teria alguma sugestão de como trabalhar em cima desse problema ?
Bruno Santana
Curtir tópico
+ 0Post mais votado
03/08/2015
Porém existe uma preocupação quanto a performance, nesse cenário é possível que ao mandar popular esse array "arquivos = diretorio.listFiles" existam muitos arquivos no diretório sendo scaneado, muitos mesmo, na casa de milhões por exemplo, podendo assim estourar a memória etc. Alguem ai teria alguma sugestão de como trabalhar em cima desse problema ?
Eu sou apto a trabalhar com a ideia de "blocagem". Blocagem é uma tecnica de dividir para conquistar, ou seja, você quebra seu problema em problemas menores. O que eu fari ano seu caso ?
1) Se a velocidade do processamento não for importante, você pode trabalhar apenas com 1 Thread caso contrário o ideal seria criar várias Threads para processar os arquivos de forma concorrente.
2) Com a ideia da BLOCAGEM você parametriza quantos arquivos devem ser processados por vez, ex: 500 a cada leitura. Assim, toda vez que a leitura desses 500 terminar você pega mais 500 e assim por diante. Carregar 1 milhão de uma vez só com certeza vai lhe trazer um "stackoverflow".
Um exemplo simples de blocagem:
public void init(){
int blockSize = 500;
File[] filesToReady = getFiles(blockSize);
for(File f : filesToReady){
//faça seu processamento aqui
}
marcarComoLido(filesToReady);
}
public File[] getFiles(int quantidade){
//retorna uma quantidade de arquivos especificada
}
public void marcarComoLido(File[] files){
//pode mudar o nome do arquivos adicionando uma palavra-chave que identifique que ele já foi lido ou mesmo mudar ele de diretorio
}
Ronaldo Lanhellas
Gostei + 1
Mais Posts
05/08/2015
Bruno Santana
Muito obrigado pela resposta! Sempre salvando!!!
Gostei + 0
06/08/2015
Ronaldo Lanhellas
Gostei + 0
06/08/2015
Roniere Almeida
Gostei + 0
11/08/2015
Bruno Santana
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)