Fórum Vazamento de memória em DataSet´s #367567
07/01/2009
0
Primeiramente gostaria de cumprimentar a todos, este é meu primeiro post nessa comunidade. Cheguei aqui lendo uma edição da revista da ClubeDelphi (revista que a empresa em que trabalho possui assinatura).
Estou utilizando o Delphi 2007 Win32 e gostaria de saber se alguém já percebeu que quando é aberto um DataSet ele consome 2X de memória e quando o fechamos é liberado apenas X? Experimentem fazer um loop meio absurdo para entenderem o que estou dizendo:
while True do begin Application.ProcessMessages; SQLDataSet1.Close; SQLDataSet1.Params.ParamByName(´PARAMETRO´).AsInteger := 1; SQLDataSet1.Open; end;
Esse vazamento torna-se muito visível quando a tabela é relativamente grande (fiz esse teste com uma tabela com mais de 100 colunas).
Uma maneira que encontrei de ´resolver´ o problema em determinados casos foi criando o DataSet e liberando-o em tempo de execução, segue:
while True do begin Application.ProcessMessages; with Teste do begin Teste := TSQLDataSet.Create(Self); CommandText := ´select * from TABELA where PARAMETRO= :PARAMETRO´; SQLConnection := SQLConnection1; Params.CreateParam(ftUnknown, ´PARAMETRO´, ptUnknown); Params.ParamByName(´PARAMETRO´).AsInteger := 1; Open; FreeAndNil(Teste); end; end;
Mas em outros casos isso não é possível fazer dessa maneira. Tendo em vista também que o sistema fica meio ´xulo´ fazendo dessa maneira.
Alguém já se deparou com isso antes? Conseguiu resolver? Tem alguma sugestão ou apenas consegue me indicar um caminho de porque razão isso está acontecendo?
Desde já, muito obrigado e um bom ano novo a todos!
Woinch
Curtir tópico
+ 0Posts
07/01/2009
Woinch
Efetuei o teste anterior dentro de um loop finito no Delphi 2007 c/ DBX4, gravando a memória que estava sendo utilizada antes da execução e depois. Sei que não serve como parâmetro, mas percebi que nessa situação o sistema alocou cerca de 80M de memória enquanto em Delphi 7 alocou apenas 20M. Alguém possui Delphi 2006 para efetuar o mesmo teste c/ DBX3?
Parece que esse problema já existe nas versões anteriores do Delphi, mas acredito que se agravou com o DBX4.
Gostei + 0
21/01/2009
Fabriciocolombo
Gostei + 0
22/01/2009
Woinch
Obrigado!
Gostei + 0
22/01/2009
Johnny-walker
Assim fica para posterior pesquisas a outros usuários que venham ater o mesmo problema...
bye
Gostei + 0
23/01/2009
Woinch
Agora estou utilizando um terceiro da Devart: dbexpoda40.dll
Obrigado! :D
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)