Performance ClientDataSet (Append)

10/11/2009

0

Tenho uma rotina implementada que utiliza ClientDataSet para armazenar registros de forma temporária. Os dados são extraídos de diversos SQL's, portanto não utilizo o Provider para preencher esse Client, faço um loop nos registros selecionados e adiciono cada registro através do Append.

Trata-se de um projeto console que precisa ser rodado no linux, então faço a compilação no Kylix 3.

Aí está o meu problema, a inserção do registro no ClientDataSet está muito lenta. Por exemplo, gasto 1 seg para selecionar os registros no banco (+/- 7.000) e 5min para armazena-los no ClientDataSet. Isso ocorre apenas para o projeto compilado no Kylix, o projeto compilado no Delphi é rápido.

Alguém já passou por um problema semelhante?

Valeu!
Paulo Pontes

Paulo Pontes

Responder

Post mais votado

08/12/2009

Pessoal,

identificamos o problema aqui. É o FieldByName e não o Append. Fizemos a substituição da função FieldByName pela propriedade Fields[n] e o problema foi resolvido.

Para vocês terem uma idéia tinhamos um processo aqui que gastava 18:46 min (com FieldByName) e passou a gastar 20 seg (com Fields[n]).

Não chegamos a avaliar a implementação do Kylix para a função FieldByName. E como o Kylix foi descontinuado vamos avaliar se continuaremos com ele, pois poderemos ter novas surpresas.

Obrigado pelas Dicas.

Paulo Pontes

Paulo Pontes
Responder

Mais Posts

11/11/2009

Guinther Pauli

Dr Paulo

Tente desativar o log de alterações do CDS antes das operações:

ClientDataSet1.LogChanges := False;
...

Att,

Guinther Pauli
guinther.pauli@gmail.com
Editor Geral Revista ClubeDelphi
Editor Geral Revista .net Magazine Brasil
Microsoft Certified: MCP,MCAD,MCSD.NET,MCPD,MCTS
Delphi Certified: 3,5,6,7,2005,2006,Web,Kylix
http://guintherpauli.blogspot.com
http://twitter.com/guintherpauli




Responder

12/11/2009

Paulo Pontes

Guinther,

já fiz esse teste e não adiantou... tentei o MergeChangeLog a cada 100 registros incluídos, mas também não adiantou...

Será limitação do ClientDataSet do Kylix? (apesar de perceber que a compilação feita no Delphi também não tem boa performance não, mas a do Kylix que eu preciso é bem mais crítica).


Responder

17/11/2009

Paulo Pontes

Aparentemente o problema está no Kylix mesmo, encontrei problema de performance em outra situação:

Faço um loop em um ClientDataSet e dentro desse loop tenho uma pesquisa 'FindKey' em outro ClientDataSet (para executar alguns procedimentos), enquanto na compilação feita no delphi o tempo gasto foi de 1min na compilação do Kylix o tempo gasto foi de 21min.

Tenho alguma outra alteranativa para compilação desse projeto a não ser o Kylix?
Responder

17/11/2009

Anderson

Qual a configuração do servidor windows e do servidor linux (versão do sistema operacional, processador, ram, banco de dados) ?

O servidor linux esta instalado em alguma maquina virtual ?

Durante o processamento o servidor linux não está rodando aplicações concorrentes (backup, atendendo outros usuários, etc.) ? Esta fazendo uso da memória swap ?

Indicadores de processamento costumam diminuir muito a performance em função da atualização de tela. Se for o caso, coloque para ser exibido somente a cada 10% processado ou mais.

Chegou a utilizar o disablecontrols para desconectar da parte visual durante o processamento ?

Ao rodar a aplicação, analisou os processos do linux que estao rodando (comando top)  ?
Responder

17/11/2009

Paulo Pontes

Anderson,

na verdade trata-se de um projeto console e o servidor linux é bem mais parrudo que a máquina windows, por isso continuo achando que o problema é a compilação do Kylix...

Valeu!!!
Responder

26/11/2009

Paulo Pontes

Ainda não encontrei uma solução... mas alguma idéia?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar