Desempenho no Sistema

Olá pessoal tudo bem!

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.

Grato :smiley:

Use o Profiler do NB:

http://www.netbeans.org/features/java/profiler.html

Por favor, descreva a solução/arquitetura aplicada na parte que está lenta.

flws

basicamente esse é o codigo do jframe:

[code] private void verificaTipodeAvaliacao() {

    CargoAvalDAO ca = new CargoAvalDAO();
    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 (int i = 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");
    }
}

public void verificaCodSecaoGerencia() {

    FuncionarioDAO fdao = new FuncionarioDAO();
    DefaultTableModel dtm = new DefaultTableModel();
    ArrayList<Funcionario> listafunc = fdao.listaFuncionariosPorSetor(Funcionario.getcodsecaoGerencia(), Funcionario.matriculaGestor);

    TableColumn desabilitaColuna = jTabelaFunc.getColumnModel().getColumn(3);
    // desabilitaColuna.setMaxWidth(0);
    //desabilitaColuna.setMinWidth(0);

    dtm = (DefaultTableModel) jTabelaFunc.getModel();

    for (int i = 0; i < listafunc.size(); i++) {

        dtm.addRow(new Object[]{
            listafunc.get(i).getIdfunc(),
            listafunc.get(i).getNome(),
            listafunc.get(i).getFuncao(),
            listafunc.get(i).getCodfuncao()
        });
    }
}[/code]

Todos os dao’s sao iguais, só muda a consulta, logico né. :smiley:

[code]

    lista = new ArrayList();
    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);
        ResultSet rs = procurarlistaFuncionariosPorSetor.executeQuery();

        while (rs.next()) {
            Funcionario f = new Funcionario();
            f.setIdfunc(rs.getString("chapa"));
            f.setNome(rs.getString("nome"));
            f.setFuncao(rs.getString("funcao"));
            f.setCodfuncao(rs.getString("codigo"));
            lista.add(f);
        }

    } catch (SQLException ex) {
        ex.printStackTrace();
    }

    return lista;


}[/code]

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?

[quote]Essas mesmas querys carregadas diretamante no banco de dados demoram?[/quote] -> sim, uns 5 a 10 segundos

[quote]Quantos registros retornam essas querys?[/quote] -> essa especifica aí em cima retorna 1 tupla(5 segundos) mas no geral nao passa de 350 tuplas.

[quote]
Qual banco de dados vc usa?[/quote] -> sqlserver

[quote]Você usa algum tipo de paginação?[/quote] -> nao sei do que se trata. :smiley:

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á?

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!