Consumo de memoria com laço

7 respostas
Luciano_Lopes

Pessoal, tenho um laço onde percorro e atualizo 100 registros. O grande problema é que minha aplicação é web e este laço precisa ser chama a cada 3 ou 4 segundos e isso esta consumindo muita memoria. Existe alguma forma de eu atualizar todos esses registros de uma forma mais rapida, sem precisar de um laço ou pelo menos deixar o laço mais rapido? O meu código esta mais ou menos assim (é uma fila de taxi, onde o primeiro a sair e o ultimo a entrar):

for(int i=0;i<pessoasdao.listarfila(posicao).size();i++){
                pessoasdao.avancar_fila(pessoasdao.listarfila(posicao).get(i), pessoasdao.listarfila(posicao).get(i).getPosicao()-1);
            }

7 Respostas

sergiolopes

O que esses métodos fazem? Mexem no banco? Vc faz 100 updates por vez, isso? Não daria pra fazer num só?

De qualquer forma, chamar o listarfila 3x me parece desperdício. Já daria pra otimizar isso. Chama 1x e guarda numa variável.

Luciano_Lopes

Os metodos atualizam no banco, são 100 updates. Estou pensando em colocar na variavel, o processamento melhoraria muito?

AndreAlcantara

Pelo jeito vc usa JPA. Se ainda sim não usar.
tente atualizar por batch.
Exemplo… Atualizar todos e so depois da commit.

Luciano_Lopes

Mas nesse caso o commit demoraria, ou não?

davidbuzatto

Não. Você vai ter uma transação ao invés de várias. Experimenta alterar para ver o que acontece.

Luciano_Lopes

blz, irei fazer os testes. Obrigado galera.

Luciano_Lopes

Galera, problema aparentemente solucionado, vou ficar monitorando para ver se vai dar algum problema. Uma outra duvida que tenho, como posso fazer para esse metodo que chama o laço ser “executado em fila”, tipo, o usuario só pode chamar o metodo novamente depois que ele tiver finalizado a execução? Ou a jvm ja se encarrega de fazer isso? É que preciso que essa lista seja acessada e alterada constatemente por N usuários.

Criado 31 de dezembro de 2015
Ultima resposta 31 de dez. de 2015
Respostas 7
Participantes 4