Fórum Lentidão ClienteDataset #403895

28/06/2011

0

Bom dia pessoal! Preciso da ajuda de vocês.

Terminei o desenvolvimento do SPED, e usei o clientdataset para cada tipo de registro, ja que preciso totalizar por varias formas. Mas o que acontece que o clientedataset apos ter + de 5 mil registros, fica extremamente lento. Ele processa 5 mil registros em 1 minuto, e o restante por exemplo 10 mil em 2 horas.

Como eu desenvolvi.

Tenho um SQLQUERY, com todas as notas, fiz um while lendo esse sqlquery e jogando dentro do clientedataset. Como preciso totalizar no clientedataset, tenho que dar locate ou findkey para saber se ja existe o registro antes de incluir novamente. Sei que fica lento quando aumenta os dados, mas no final de tudo, o clientedataset tem 7 mil registros isso seria muito pra algo na memoria? Ja criei indices, pela mesma condição do findkey, e ainda lento.


Obrigado..

Rodrigo.
Rodrigo Santos

Rodrigo Santos

Responder

Posts

28/06/2011

Rafael Mattos

nesse momento vc ja viu quanto sua aplicação ocupou de memoria?
Responder

Gostei + 0

28/06/2011

Rodrigo Santos

Sim, ela esta usando aproximadamente 80MB. Meu pc tem 4GB core i5.
Tem algo a ver com a memoria usada?

Rodrigo
Responder

Gostei + 0

28/06/2011

Rafael Mattos

Sim, ela esta usando aproximadamente 80MB. Meu pc tem 4GB core i5.
Tem algo a ver com a memoria usada?

Rodrigo
é que quanto mais registro ele trazer para o ClientDataSet, o consumo da memoria vai aumentar -------------------------------------------------------------------------------- Blog: http://mundodoprogramador.wordpress.com/ MSN: rafmattos@hotmail.com Twitter: _rafmattos
Responder

Gostei + 0

28/06/2011

Pjrm1470

O CDS (ClientDataSet) tem 2 propriedades se não estou enganado, que você pode fazer ele carregar apenas uma quantidade de registro (pacote).

Me corrijam se eu estiver enganado, mas deixe a propriedade FetchOnDemand como True. E define a quantidade de pacote que será carregado na propriedade PacketRecords.

Dessa forma o seu CDS so vai ocupar espaço na memoria que for realmente usado.
Abraço e boa sorte.
Responder

Gostei + 0

28/06/2011

Rodrigo Santos

Pessoal obrigado pelas repostas, Mas no caso não estou usando o ClientDataset com nenhuma tabela, ou mesmo banco de dados. Não uso Datasetprovider->Dataset->ClienteDataset, estou usando apenas o ClientDataset, como tabela temporaria para armazenar os dados antes de escrever o TXT.

Grato.
Responder

Gostei + 0

28/06/2011

Rodrigo Santos

Boa noite pessoal!

Descobri o problema fazendo testes , e venho compartilhar com voces. Como não uso banco de dados com o clientedataset o mesmo ficando somente para tabela temporaria, preciso alterar diversas vezes o registro para totalizar, então uso o EDIT. Analisando o edit, ele salva todas modificacoes no dataset , para enviar ao provider. Como eu nunca uso o Applyupdate pois nao estou conectado ao BD, ele vai pesando.

Solução:

TClienteDataset1.Logchanges = false; Aviso ele para não salvar as modificações.

Tempo: 3 horas p/ 29 minutos e  13 segundos.

Rodrigo
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar