Liberar memória dentro de um laço

Delphi

05/12/2005

Amigos

Estou precisando fazer um grande processamento dentro de um laço
for e estou verificando que há um grande consumo de memória. Já tentei utilizar a função getMem() mas não obtive melhoras.
alguém conhece outra maneira de liberar a memória utilizada?

Grato.


Imoreira

Imoreira

Curtidas 0

Respostas

Thomaz_prg

Thomaz_prg

05/12/2005

Após finalizar cada processamento, utilize Application.ProcessMessages:

Tipo

uses Forms;

//

for i:=0 to TotalDoLaco do begin

{Seus Comandos}

Application.ProcessMessages;

end;


GOSTEI 0
Imoreira

Imoreira

05/12/2005

Caro thomaz_prg, é exatamente assim que estou utilizando mas esse procedimento não libera a memória.


GOSTEI 0
Thomaz_prg

Thomaz_prg

05/12/2005

Mas você não pode usar o GetMem... pois o getmem pega mais memória... ele reserva mais memória e não libera...

E que tipo de processamento é... envolve banco de dados?? Ou é processamento de arquivos e/ou imagens??


GOSTEI 0
Imoreira

Imoreira

05/12/2005

Não me expressei direito.
Estou utilizando o getmem() para reservar memória e freemem() para liberá-la.

Não utilizo banco de dados nem imagens.

É um sistema para desdobramentos de números de loteria. Utilizo o for para gerar os números.


GOSTEI 0
Ipc$

Ipc$

05/12/2005

Utilizo AllocMem p/ alocar memória inicial, ReallocMem p/ aumentar a memória inicial alocada e FreeMem p/ liberar. Os tres funcionam sem problemas.


GOSTEI 0
Massuda

Massuda

05/12/2005

...estou verificando que há um grande consumo de memória.
Como você está medindo isso? Usando o gerenciador de tarefas? Se for seu caso, saiba que o gerenciador de tarefas mostra um valor maior (às vezes muito maior) do que o real.

Se você está liberando toda a memória que você alocou com GetMem usando FreeMem, não tem motivo para se preocupar.


GOSTEI 0
Imoreira

Imoreira

05/12/2005

Caro Massuda

Sim, estou utilizando o gerenciador de tarefas do Windows e tenho verificado que a memória física disponível está caindo rapidamente
e tenho verificado que o processamento está ficando muito lento.


GOSTEI 0
POSTAR