Lentidão e Erro de memória virtual muito baixa.
Estamos com um problema de lentidão do sistema. A partir de 50 itens em um clientdataset, o sistema começa a ficar lento, chegando ao ponto de travar e ocasionar um erro de memória virtual muito baixa.
Acredito que o problema esteja no evento onCalcFields, pois no mesmo, é instanciado um objeto produto, carregando a descrição e valor do mesmo, e feito algumas operações matemáticas.
Porém, mesmo liberando este objeto da memória, o erro persiste.
Outro detalhe importante. O erro de memória virtual baixa aparece no servidor. Nas máquinas clientes o sistema apenas trava, informando que a conexão com o servidor foi perdida.
Preciso de uma luz.
Obrigado
Acredito que o problema esteja no evento onCalcFields, pois no mesmo, é instanciado um objeto produto, carregando a descrição e valor do mesmo, e feito algumas operações matemáticas.
Porém, mesmo liberando este objeto da memória, o erro persiste.
Outro detalhe importante. O erro de memória virtual baixa aparece no servidor. Nas máquinas clientes o sistema apenas trava, informando que a conexão com o servidor foi perdida.
Preciso de uma luz.
Obrigado
Adminfo
Curtidas 0
Respostas
Adminfo
31/01/2009
Mais um detalhe para cooperar com a ajuda dos colegas.
No servidor, ao verificar o uso de arquivos de paginação no momento em que é adicionado mais um item ele vai aumentando, chegando ao ponto de travar quando este excede o limite.
Ao fechar o aplicativo cliente, o uso de arq. de paginação do servidor é reduzido, mas isto somente quando o aplicativo inteiro é fechado. Quando a somente a tela em questão é finalizada, os arquivos de paginação não sofrem qualquer alteração, continuam altos. Lembrando que meu aplicativo utiliza MDI para as telas.
Se me ajudarem a reduzir o uso de arquivos de paginação do servidor ao fechar somente a tela em questão, e não todo o sistema, já me ajudaria um monte.
Obrigado.
No servidor, ao verificar o uso de arquivos de paginação no momento em que é adicionado mais um item ele vai aumentando, chegando ao ponto de travar quando este excede o limite.
Ao fechar o aplicativo cliente, o uso de arq. de paginação do servidor é reduzido, mas isto somente quando o aplicativo inteiro é fechado. Quando a somente a tela em questão é finalizada, os arquivos de paginação não sofrem qualquer alteração, continuam altos. Lembrando que meu aplicativo utiliza MDI para as telas.
Se me ajudarem a reduzir o uso de arquivos de paginação do servidor ao fechar somente a tela em questão, e não todo o sistema, já me ajudaria um monte.
Obrigado.
GOSTEI 0
Woinch
31/01/2009
Isso pode ser diversas coisas. Como se trata de um número pequeno de registros acredito que seja algum erro na lógica da programação fazendo que o programa entre em algum loop bem grande que instancie diversos objetos e não libere-os da memória após utiliza-los.
Uma pergunta, esse ClientDataSet está vinculado a algum DataSetProvider ou está sendo alocado direto na memória?
Estava com um problema parecido, descobri que era um ´bug´ nos drivers DBExpress do Delphi 2007. Veja o tópico a seguir: http://forum.devmedia.com.br/viewtopic.php?t=99143
Espero ter ajudado.
Uma pergunta, esse ClientDataSet está vinculado a algum DataSetProvider ou está sendo alocado direto na memória?
Estava com um problema parecido, descobri que era um ´bug´ nos drivers DBExpress do Delphi 2007. Veja o tópico a seguir: http://forum.devmedia.com.br/viewtopic.php?t=99143
Espero ter ajudado.
GOSTEI 0
Adminfo
31/01/2009
Cara, um loop não é pois já fiz esta verificação. Quando ao CDS, eu estou conectando ele a um DataSetProvider sim. Tem alguma configuração que eu possa fazer nele para agilizar isso?
E quanto a este outro driver, onde eu encontro?
Muito obrigado.
E quanto a este outro driver, onde eu encontro?
Muito obrigado.
GOSTEI 0
Adminfo
31/01/2009
E, outra coisa. Usamo o Delphi 7, e não o 2007
GOSTEI 0
Woinch
31/01/2009
Então desconsidere o que eu falei.
Quanto ao DataSetProvider, você está utilizando o conjunto de ClientDataSet + SQLDataSet + DataSetProvider? Se sim... pode verificar se a propriedade GetMetadata do SQLDataSet ou do componente que faz os selects no banco de dados está marcada como False?
Se não for isso não sei mais o que pode ser.
Boa sorte.
Quanto ao DataSetProvider, você está utilizando o conjunto de ClientDataSet + SQLDataSet + DataSetProvider? Se sim... pode verificar se a propriedade GetMetadata do SQLDataSet ou do componente que faz os selects no banco de dados está marcada como False?
Se não for isso não sei mais o que pode ser.
Boa sorte.
GOSTEI 0
Adminfo
31/01/2009
Esta propriedade dos SQLDataSet está tudo com True.
E agora?
E agora?
GOSTEI 0
Woinch
31/01/2009
Experimente marcar como False e veja se resolve.
GOSTEI 0