[firebase-br] ClientDataSet+IBQuery x IBDataSet = Queda de Desempenho

Sandro Souza escovadordebits em gmail.com
Seg Dez 1 17:07:50 -03 2008


Bom dia/tarde.

Rapaz, infelizmente tenho que te dizer que o uso do ClientDataSet tem alguns
"inconvenientes", como, no mínimo, acúmulo de memória.

Existe um bug dentro da biblioteca midas.dll (e libmidas.so para linux) que
ainda não foi corrigido, e ninguém sabe se algum dia será, que causa o
acúmulo de memória, ou seja, você abre um ClientDataSet, obtendo dados de um
DataSetProvider (como informado por você). Você poderá notar que, mesmo
fechando o ClientDataset, nem toda a memória utilizada por ele para manter
os registros em memória será liberada, ou seja, ocorre o que chamamos de
"vazamentos de memória", ou seja, blocos de memória que não foram
devidamente desalocados/liberados e que fica consumindo a memória da máquina
até que você encerre a sua aplicação.

Fora esse pequeno detalhe, que já é motivo para não utilizá-lo, ainda temos
a questão da performance, pois você acrescentou mais camadas entre o dado
que está no banco de dados e a interface final para o usuário, então a
performance cai mesmo.

Se você realmente necessita manter dados em memória, como o ClientDataSet
faz, sugiro que veja algumas alternativas, como o TMemoryTable, que faz o
equivalente, mas sem alguns bugs.

Espero ter ajudado mais que atrapalhado.

2008/12/1 Kleber Caneva <kdcc em terra.com.br>

> Vou te dar uma dica:
>
> Trabalhe sempre com 2 CDS.  Um com selects mais simples para telas de onde
> você usa Grids e outroonde ficaria as NestedTable e tudo mais para Edição.
>
> Basicamente o da Grid, terá muitos registros e poucos campos. O outro tela
> apensa um registor e muitos campos.
>
> Isso ajuda muito na perfromace.
>
> []´s
>
> Kléber Caneva
>
>
> ----- Original Message -----
> From: "Fabrício Fadel Kammer" <ffkammer em conchalnet.com.br>
> To: "Lista Firebase" <lista em firebase.com.br>
> Sent: Monday, December 01, 2008 3:45 PM
> Subject: [firebase-br] ClientDataSet+IBQuery x IBDataSet = Queda de
> Desempenho
>
>
> Boa tarde pessoal,
>
> Migrei a forma de acesso de minha base firebirde de IBDataSet para
> IBQuery+DatasetProvider+ClientDataSet e os usuário estão reclamando de
> uma queda significativa de desempenho no sistema.
>
> Já procurei configurar o ClientDataSet da melhor maneira possível (até
> onde meus conhecimentos permitem). Por exemplo, configurei em cada
> situação especificamente, para que o ClientDataSet traga o menor número
> de registros possível (propriedade PacketRecords). As instruções SQL
> estão toda corretas e são as mesmas que eu utilizava anteriormente com o
> IBDataSet.
>
> Preciso da ajuda dos colegas que possuem mais experiência com
> ClientDataSet e Firebird para saber se há algo que eu possa fazer para
> agilizar o sistema, caso contrário perderei todo o trabalho feito e
> terei que retornar à forma anterior, pois preciso de agilidade no sistema.
>
> Obrigado
>
> Fabrício
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista