Lentidão para popular grid



  • Olá pessoal, boa tarde!

    Estamos utilizando uma conexão ODBC para acessar arquivos DBF locais e como "SGBD" para gerenciar os arquivos DBF e manter os índices atualizados estamos utilizando o Advantage Database Server.

    Estamos com o seguinte problema:
    A aplicação desenvolvida faz conexão via ODBC ao Advantage que acessa os DBFs localmente e traz os resultados para o grid, porém está MUITO lento. Criei pontos no sistema que medem o tempo de cada tarefa, porém as tarefas são realizadas em tempos pertinentes, então não sabemos o que pode estar acontecendo...

    Tabela de tempo
    - Query ao banco: 203ms
    - Inserção dos dados ao grid: 62ms
    - Execução total: 119371ms

    Obrigado por qualquer ajuda,
    Danniel Magno.


  • [quote="DannielMagno"]Olá pessoal, boa tarde!

    Estamos utilizando uma conexão ODBC para acessar arquivos DBF locais e como "SGBD" para gerenciar os arquivos DBF e manter os índices atualizados estamos utilizando o Advantage Database Server.

    Estamos com o seguinte problema:
    A aplicação desenvolvida faz conexão via ODBC ao Advantage que acessa os DBFs localmente e traz os resultados para o grid, porém está MUITO lento. Criei pontos no sistema que medem o tempo de cada tarefa, porém as tarefas são realizadas em tempos pertinentes, então não sabemos o que pode estar acontecendo...

    Tabela de tempo
    - Query ao banco: 203ms
    - Inserção dos dados ao grid: 62ms
    - Execução total: 119371ms

    Obrigado por qualquer ajuda,
    Danniel Magno.[/quote]
    De que forma vc está populando a grade? Registro a registro? Linha a linha?
    E a persistência no banco de dados é feita como? Ou você apenas apresenta em tela?


  • Inicialmente, eu estava utilizando a função "Grade - Preencher com Consulta" porém demorava o tempo que postei acima. Pedindo ajuda INÚMERAS vezes ao suporte da Softwell, e eles sempre me falando que era um problema devido à minha inexperiência com o Maker, tive que contornar esse gargalo da função deles.

    Agora, estou fazendo da seguinte maneira:
    - Crio uma lista que servirá de matriz para o grid;
    - Percorro o resultado retornado da consulta;
    - Para cada resultado eu crio uma nova lista, preencho com os dados da consulta e insiro na matriz;
    - Utiliza a função "Grade - Preencher da Lista" para inserir os dados no grid.

    Utilizando o meu método, uma pesquisa com 1000 registros preenche o grid em 1 segundo. Um ganho significativo na performance, não?

    Como ao utilizar as funções acima, perde-se a função de edição de dados no grid, estou contornando esse problema de outra forma, então no momento só estou exibindo os dados.


  • [quote="DannielMagno"]Inicialmente, eu estava utilizando a função "Grade - Preencher com Consulta" porém demorava o tempo que postei acima. Pedindo ajuda INÚMERAS vezes ao suporte da Softwell, e eles sempre me falando que era um problema devido à minha inexperiência com o Maker, tive que contornar esse gargalo da função deles.

    Agora, estou fazendo da seguinte maneira:
    - Crio uma lista que servirá de matriz para o grid;
    - Percorro o resultado retornado da consulta;
    - Para cada resultado eu crio uma nova lista, preencho com os dados da consulta e insiro na matriz;
    - Utiliza a função "Grade - Preencher da Lista" para inserir os dados no grid.

    Utilizando o meu método, uma pesquisa com 1000 registros preenche o grid em 1 segundo. Um ganho significativo na performance, não?

    Como ao utilizar as funções acima, perde-se a função de edição de dados no grid, estou contornando esse problema de outra forma, então no momento só estou exibindo os dados.[/quote] Já pensou em apenas popular a tabela e atualizar a grade no final do processo?
    Trabalhe no banco de dados e não na interface... talvez seja o melhor caminho para você.


  • Não entendi o que você falou sobre banco de dados... Mas estou fazendo isso, no momento.
    Percorro os resultados e insiro-os em uma matriz. No final do processamento insere os valores da matriz no grid.


  • Vejo que há um outro problema fora aquele que vc mencionou quando o sistema estiver em utilização WEB. A população da grid deveria ser sob demanda, não trafegar todos os registros do banco para a grid de uma só vez, teria que haver um esquema de paginação na grid, tipo de 50 em 50 registros para o usuário "rolar" as páginas.

Log in to reply