Lentidão e Erro de memória virtual muito baixa.

Delphi

31/01/2009

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


Adminfo

Adminfo

Curtidas 0

Respostas

Adminfo

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.


GOSTEI 0
Woinch

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.


GOSTEI 0
Adminfo

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.


GOSTEI 0
Adminfo

Adminfo

31/01/2009

E, outra coisa. Usamo o Delphi 7, e não o 2007


GOSTEI 0
Woinch

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.


GOSTEI 0
Adminfo

Adminfo

31/01/2009

Esta propriedade dos SQLDataSet está tudo com True.

E agora?


GOSTEI 0
Woinch

Woinch

31/01/2009

Experimente marcar como False e veja se resolve.


GOSTEI 0
POSTAR