Performance

4 respostas
K

Pessoal, tenho uma aplicação simples que le um arquivo txt e exibe em um textarea. Porém conforme a leitura do arquivo a aplicação vai ficando muito lenta, chegando a ler uma linha por segundo.

Alguem sabe como resolver este problema? o pedaço do código que lê o arquivo está abaixo.
[]

try{

String caminho = label2.getText();

in = new BufferedReader(new FileReader(caminho));

while ((str = in.readLine()) != null){

textArea1.append(str+"\n");

}

}

catch (IOException erro){

erro.printStackTrace();

}

4 Respostas

C

Olá,
Vc precisa fechar o seu InputStream

in.close();

Deve resolver!

Até+!

V

Cara, deve ser problema do tratamento de String que ta ocupando muita memória tente passar tudo para um StringBuffer primeiro para depois passar para o componente da janela.
Se mesmo assim não der certo force o programa a chamar o garbage collector usando System.gc()

F

tipo, ta lento pq vc ta colocando uma linha por vez no JTextArea, se vc adicionar tudo de uma vez, vai ficar MUITO mais rapido:

try{
String caminho = label2.getText();
String str;
sb = new StringBuffer();
in = new BufferedReader(new FileReader(caminho));
while ((str = in.readLine()) != null){
sb.append(str + "\n");
}
textArea1.append(sb.toString());
in.close();
}
catch (IOException erro){
erro.printStackTrace();
}

se o arquivo for MUITO grande, e vc quiser q va mostrando aos poucos, vc pode fazer isso, mas n precisa mostrar linha por linha, vc pode fazer isso mais esporadicamente:

final int LINHAS = 100;
try{
String caminho = label2.getText();
String str;
int l = 0;
sb = new StringBuffer();
in = new BufferedReader(new FileReader(caminho));
while ((str = in.readLine()) != null){
sb.append(str + "\n");
if (++l == LINHAS){
textArea1.append(sb.toString());
sb = new StringBuffer();
System.gc();
l = 0;
}
}
textArea1.append(sb.toString());
in.close();
}
catch (IOException erro){
erro.printStackTrace();
}
K

Pessoal, valeu…coloquei tudo no StringBuffer e ficou bala…

muito obrigado mesmo.

“viniciusprd”:
Cara, deve ser problema do tratamento de String que ta ocupando muita memória tente passar tudo para um StringBuffer primeiro para depois passar para o componente da janela.
Se mesmo assim não der certo force o programa a chamar o garbage collector usando System.gc()

Criado 24 de agosto de 2004
Ultima resposta 27 de ago. de 2004
Respostas 4
Participantes 4