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

Marcelo marcelo em magnosystem.com.br
Dom Fev 19 03:12:22 -03 2017


Já testou colocando um comando de unprepare após o close ?


Em 17/02/2017 11:01, thiago.almeida em neainformatica.com.br escreveu:
>   
>
> if qMovimentoMes.Active then
>   qMovimentoMes.Close;
>
> qMovimentoMes.SQL.clear;
>   qMovimentoMes.SQL.Add(sMOVIMENTOMES);
>
> qMovimentoMes.SQL.Add(Format('where id = %d',[_id])
>   qMovimentoMes.Open;
>
>
> Quando o debug passa pelo .Open, o consumo de memória sobe. Quando
> passa pelo .Close, não diminui.
>
> O estouro de memória acontece ANTES de
> fechar o form
>
> Embora haja perto de 5000 interações, o loop não está
> infinito.
>
> Obrigado
>
> Francisco Thiago
>
> Em 17/02/2017 09:47, Carlos
> Andrade escreveu:
>
>> 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.brescreveu:
>>> 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.
>> ______________________________________________
>>
> FireBase-BR (www.firebase.com.br [1]) - Hospedado em www.locador.com.br
> [2]
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107 [3]
>> Para consultar
> mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html [4]
>
>
>
>
> Links:
> ------
> [1] http://www.firebase.com.br
> [2]
> http://www.locador.com.br
> [3]
> http://www.firebase.com.br/fb/artigo.php?id=1107
> [4]
> http://www.firebase.com.br/pesquisa_lista.html
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>





Mais detalhes sobre a lista de discussão lista