Estou com o seguinte problema: O meu sistema esta tendo algumas lentidoes em determidadas parte do software… as vezes demora muito tempo para carregar um jframe com alguma tabela, por exemplo. Existe alguma ferramenta que possa realizar esse monitoramento de desempenho? o proprio debug faz isso?
Meu sistema faz conexao do banco na rede e minha IDE é o NETBEANS.
Por favor, descreva a solução/arquitetura aplicada na parte que está lenta.
flws
rodrigodsw2005
basicamente esse é o codigo do jframe:
privatevoidverificaTipodeAvaliacao(){CargoAvalDAOca=newCargoAvalDAO();if("".equals(this.codfuncao)){if(ca.listaIdtipoPorIdcargo(Integer.parseInt(this.codfuncao)).isEmpty()){JOptionPane.showMessageDialog(null,"O cargo nao possui um tipo de avaliação cadastrada.");}else{for(inti=0;i<ca.listaIdtipoPorIdcargo(Integer.parseInt(this.codfuncao)).size();i++){this.tipoaval=(Integer)ca.listaIdtipoPorIdcargo(Integer.parseInt(this.codfuncao)).get(i).getIdtipoavaliacao();}}}else{JOptionPane.showMessageDialog(null,"Por favor, selecione o funcionario");}}publicvoidverificaCodSecaoGerencia(){FuncionarioDAOfdao=newFuncionarioDAO();DefaultTableModeldtm=newDefaultTableModel();ArrayList<Funcionario>listafunc=fdao.listaFuncionariosPorSetor(Funcionario.getcodsecaoGerencia(),Funcionario.matriculaGestor);TableColumndesabilitaColuna=jTabelaFunc.getColumnModel().getColumn(3);// desabilitaColuna.setMaxWidth(0);//desabilitaColuna.setMinWidth(0);dtm=(DefaultTableModel)jTabelaFunc.getModel();for(inti=0;i<listafunc.size();i++){dtm.addRow(newObject[]{listafunc.get(i).getIdfunc(),listafunc.get(i).getNome(),listafunc.get(i).getFuncao(),listafunc.get(i).getCodfuncao()});}}
Todos os dao's sao iguais, só muda a consulta, logico né. :D
lista=newArrayList();conn=Conexao.getConnection();try{procurarlistaFuncionariosPorSetor=connRM.prepareStatement("SELECT PFUNC.NOME AS NOME, PFUNCAO.NOME AS FUNCAO, PFUNC.CHAPA, PFUNCAO.CODIGO "+"FROM PCARGO INNER JOIN PFUNC ON PCARGO.CODCOLIGADA = PFUNC.CODCOLIGADA INNER JOIN "+"PFUNCAO ON PCARGO.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND PCARGO.CODIGO = PFUNCAO.CARGO AND "+"PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO INNER JOIN "+"PSECAO ON PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO "+"WHERE (PFUNC.CODSECAO = ?) AND (PFUNC.DATADEMISSAO IS NULL) AND (PFUNC.CHAPA <> ?)");procurarlistaFuncionariosPorSetor.setString(1,codsecao);procurarlistaFuncionariosPorSetor.setString(2,matricula);ResultSetrs=procurarlistaFuncionariosPorSetor.executeQuery();while(rs.next()){Funcionariof=newFuncionario();f.setIdfunc(rs.getString("chapa"));f.setNome(rs.getString("nome"));f.setFuncao(rs.getString("funcao"));f.setCodfuncao(rs.getString("codigo"));lista.add(f);}}catch(SQLExceptionex){ex.printStackTrace();}returnlista;}
Pedrosa
Essas mesmas querys carregadas diretamante no banco de dados demoram?
Quantos registros retornam essas querys?
Qual banco de dados vc usa?
Você usa algum tipo de paginação?
rodrigodsw2005
Essas mesmas querys carregadas diretamante no banco de dados demoram?
-> sim, uns 5 a 10 segundos
Quantos registros retornam essas querys?
-> essa especifica aí em cima retorna 1 tupla(5 segundos) mas no geral nao passa de 350 tuplas.
Qual banco de dados vc usa?
-> sqlserver
Você usa algum tipo de paginação?
-> nao sei do que se trata.
rodrigodsw2005
O pior é quando eu fecho o NETBEANS e executo-o novamente e mando rodar o meu programa, misteriosamente volta funcionar rapido. logo depois ele volta a ficar lerdo. Porque será?
Pedrosa
Como vc esta gerenciando suas conexões, vc esta fechando os rs, connection, preparedStament?
Pelo numero de registrios que esta retornando voce não deveria ter nenhum problema, paginação é pegar resultados de uma query conforme precisar, por exemplo quando faz uma pesquisa no google e retorna muitos registros, são divididos por páginas, exemplo que tenha uma consulta que retorne 300 registros, ao invez de carregar todos de uma vez exibe 30 por pagina, existem componentes que fazem isso com JTable.
Além de disso é possível fazer essa paginação na sua query, pesquise como se faz com SQL!