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

thiago.almeida em neainformatica.com.br thiago.almeida em neainformatica.com.br
Sex Fev 17 09:24:40 -03 2017


 

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