FOR Otimizado?!

11 respostas
J

Olá pessoas!

Galera criei uma JTable que traz os dados do meu banco de dados, porém estou usando um FOR, adicionei 300 itens no banco e ele trouxe rápido, agora que adicionei 100 mil registros, claro que ele ficou lentíssimo, na verdade está demorando mais de 30 minutos para trazer a listagem.

Minha dúvida é saber se existe um FOR otimizado ou um substituto para o FOR, vi um pouco sobre o FOR EACH, se vocês tiverem uma dica, eu agradeço.

Valeu! 8)

11 Respostas

ViniGodoy

Você está usando DefaultTableModel?

Para que você tem um for? Já usou um profiler para ver se o problema é aí mesmo?

J

Blz ViniGodoy,

Isso mesmo estou usando um DefaultTableModel.

É possível não usar o for? Onde aprendo sobre profiler, tem aqui no GUJ?

E

O seu conceito está errado.
Quando uma tabela é muito grande, ela não deve ser posta inteirinha dentro de um JTable. O correto é criar um JTable “virtual” onde você só pega os dados quando quer visualizá-los.
Acho que deve existir alguma coisa pronta com esse nome “virtual”, é questão de procurar.

J

entanglement

Não entendi o que você quis dizer.

Estou usando um DefaultTableModel, pois acredito que ele faz esta virtualização que você disse.

Realmente quero que a tabela mostre apenas o resultado de uma “página” e quando usar a rolagem seja atualizada a visualização da tabela.

fabiofalci

Acho que o DefaultTableModel não faz essa tal virtualização, pelo menos nunca vi.

Agora, é válido trazer 100 mil registros? O usuário vai se achar? Não é melhor criar alguns filtros obrigatórios?
Uma alternativa é implementar uma espécie de paginação em swing, mas tb nunca vi, teria que fazer no braço.

E

Vamos lá. Quanto tempo leva para você ler 100.000 registros do banco, sem fazer mais nada (ou seja, sem criar uma linha em um DefaultTableModel?)

ViniGodoy

O DefaultTableModel é uma das piores implementações de TableModel possíveis. Além de ser totalmente sincronizado, ainda exige a cópia dos dados da sua classe de negócios para dentro da tabela.

Mas, de qualquer jeito, a pergunta do colega ali é válida. Faz sentido listar 100.000 registros?

furutani

Olá

Traga os registros de pouco do banco de dados. Isso poupa a rede e economiza memória do micro do usuário.

rmendes08

Na empresa em que eu trabalho temos uma prática bem simples. Máximo de 500 registros por pesquisa. Ponto final!

Marky.Vasconcelos

Voce pode criar uma tela que tenha botões para avançar os registros de 10 em 10 e etc… trazendo os dados só quando for necessario apresentar na JTable.

J

Então pessoal trazer os 100 mil é para testar o desempenho, trouxe 10 mil em menos de 1 segundo, só que aí você deve usar o JScroll para ver os dados que estão listados abaixo, vou ver se a paginação ou uma nova regra de filtro pode resolver o problema.

Obrigado pelas sugestões e dicas.

Criado 26 de fevereiro de 2010
Ultima resposta 1 de mar. de 2010
Respostas 11
Participantes 7