[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
Qua Mar 1 09:26:34 -03 2017


 

Não testei. Até pensei na possibilidade, mas teria uma sobrecarga
grande, não? Imagina: Dentro de um loop, preparando, despreparando a
query? A solução realmente foi destivar o RequestLive. Queria entender
pq. 

[]'s 

FT 

Em 19/02/2017 02:12, Marcelo escreveu: 

> Já testou
colocando um comando de unprepare após o close ?
> 
> Em 17/02/2017
11:01, thiago.almeida em neainformatica.com.brescreveu:
> 
>> 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 
>> 
>>> adding-left:5px;
border-left:#1010ff 2px sol
>> ft:5px; width:100%">TFDGUIxWaitCursor?
Está liberando da memória seu form (alto como: 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
>> 
>>>
e; liberando a memória ocupada após o .Close (causando um estouro de
memória). A solução que encontrei foi desl
>> tLive, 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] [1]) - Hospedado em
www.locador.com.br [2][2] Para saber como gerenciar/excluir seu cadastro
na lista, use: http://www.firebase.com.br
>> 
>>> ; margin-left:5px;
width:100%">Para consultar
>> mensagens antigas:
http://www.firebase.com.br/pesquisa_lista.html [3] [4] Links: ------ [1]
http://www.firebase.com.br [1] [2] http://www.locador.com.br [2] [3]
>

> ______________________________________________
> 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 [4]
> Para consultar
mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html [3]




Links:
------
[1] http://www.firebase.com.br
[2]
http://www.locador.com.br
[3]
http://www.firebase.com.br/pesquisa_lista.html
[4]
http://www.firebase.com.br/fb/artigo.php?id=1107



Mais detalhes sobre a lista de discussão lista