Array
(
)

Liberar memória dentro de um laço

Imoreira
   - 05 dez 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.


Thomaz_prg
   - 05 dez 2005

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

Tipo

uses Forms;

//

for i:=0 to TotalDoLaco do begin

{Seus Comandos}

Application.ProcessMessages;

end;


Imoreira
   - 05 dez 2005

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


Thomaz_prg
   - 05 dez 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??


Imoreira
   - 05 dez 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.


Ipc$
   - 05 dez 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.


Massuda
   - 05 dez 2005


Citação:
...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.


Imoreira
   - 05 dez 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.