Performance ClientDataSet (Append)
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!
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
Curtidas 0
Melhor post
Paulo Pontes
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.
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.
GOSTEI 1
Mais Respostas
Guinther Pauli
10/11/2009
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
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
GOSTEI 0
Paulo Pontes
10/11/2009
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).
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).
GOSTEI 0
Paulo Pontes
10/11/2009
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?
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?
GOSTEI 0
Anderson
10/11/2009
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) ?
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) ?
GOSTEI 0
Paulo Pontes
10/11/2009
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!!!
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!!!
GOSTEI 0
Paulo Pontes
10/11/2009
Ainda não encontrei uma solução... mas alguma idéia?
GOSTEI 0