[firebase-br] FireDac + Firebird: não libera cursor/memória, apos Close no FDQuery?

Carlos Andrade krlosgilson em gmail.com
Sex Fev 17 10:47:36 -03 2017


Você poderia postar o trecho do código no momento em que fecha e abre a 
query e quando fecha o form? Já verificou se no seu while nao está 
fazendo loop infinito? Acrescentou junto aos componentes do FireDac o 
TFDGUIxWaitCursor? Está liberando da memória seu form (alto como: 
form.free;)?


Em 17/02/2017 08:24, thiago.almeida em neainformatica.com.br escreveu:
> Sras e Srs, Bom dia.
>
> Em uma aplicação nossa, percebi algo que
> achei curioso.
>
> Por uma necessidade X, preciso fazer consultas ao banco
> dentro de um loob while (estou falando do Delphi).
>
> Neste loop, eu
> fecho o FDQuery, configuro os parâmetros e abro o FDQuery. Nos testes
> percebemos que esta query dentro do While não está liberando a memória
> ocupada após o .Close (causando um estouro de memória).
>
> A solução que
> encontrei foi desligar o RequestLive, tornando o dataset somente leitura
> (como não faço atualizações através dessa query, não houve problema
> algum).
>
> O caso é que eu fiquei sem entender o que de fato aconteceu.
>
>
> Pode ser que eu esteja enganado, mas até onde sei, quando se abre uma
> query, os dados são carregados e um cache interno (daí vai de cada
> componente) é mantido para que o cursor seja multi-direcional. Contudo
> eu esperava que com o .Close, toda memória alocada fosse liberada junto
> com o cursor. O que podemos identificar é que esse estouro acontece na
> máquina cliente apenas. No servidor, fica tudo tranquilo. O que me leva
> a questionar o FireDac e sua gerência de memória ou o FireDac e a falta
> de um comando para que o client (fbclient.dll) libere a memória/cursor.
>
>
> Alguém já viu isso?
>
> []'s
>
> Francisco Thiago.





Mais detalhes sobre a lista de discussão lista