Lentidão ClienteDataset
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.
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
Curtidas 0
Respostas
Rafael Mattos
28/06/2011
nesse momento vc ja viu quanto sua aplicação ocupou de memoria?
GOSTEI 0
Rodrigo Santos
28/06/2011
Sim, ela esta usando aproximadamente 80MB. Meu pc tem 4GB core i5.
Tem algo a ver com a memoria usada?
Rodrigo
Tem algo a ver com a memoria usada?
Rodrigo
GOSTEI 0
Rafael Mattos
28/06/2011
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
Tem algo a ver com a memoria usada?
Rodrigo
GOSTEI 0
Pjrm1470
28/06/2011
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.
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.
GOSTEI 0
Rodrigo Santos
28/06/2011
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.
Grato.
GOSTEI 0
Rodrigo Santos
28/06/2011
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
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
GOSTEI 0