Ir para conteúdo
  • Cadastre-se

dev botao

Liberar memoria alocada delphi


  • Este tópico foi criado há 2565 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia pessoal

estou com um problema não estou conseguindo liberar a memoria que esta sendo alocada.

Tanto na criacao do formulario quanto na criacao de componentes 

estou utilizando delphi xe7 professional, windows 7 ultimate

para criar os form faco o seguinte 

 Application.CreateForm(TForm2, Form2);{Carrega form na memória}
 Try
  Form2.ShowModal;{Mostra form em modo exclusivo}
 Finally
  Form2.Free; {Libera Memória}
 End;

o Form2 esta em availables form.

quando entro no sistema a memoria comeca em 1420 k, entro no form2 vai para 1452 k, clico no botao criar vai para 1468 k, clico no botao liberar continua 1468 k

saio do form2 continua 1468 k

 

segue um exmplo em anexo

teste.rar

Link para o comentário
Compartilhar em outros sites

Use isso que vai limpar a memoria nao utilizada por sua app

 

procedure TrimAppMemorySize;
 var
   MainHandle : THandle;
 begin
   try
     MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
     SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
     CloseHandle(MainHandle) ;
   except
   end;
   Application.ProcessMessages;
 end;
Link para o comentário
Compartilhar em outros sites

  • Moderadores

A quantidade de memória que o Windows mostra como alocada para o seu programa não é necessariamente a memória que ele está usando. O sistema operacional faz algumas "mágicas" para compartilhar a memória entre os processos e nem sempre vai liberar memória quando você desaloca objetos. A solução do xyberx vai forçar o Windows a recalcular a memória alocada para o seu processo, isso pode causar problema de performance, dependendo do uso.

Para identificar se está havendo memória não desalocada, a melhor forma é usar o FastMM.

Coloque em algum lugar no seu programa, pode ser no .dpr mesmo, logo após o begin:

begin

  ReportMemoryLeaksOnShutdown := True;

  Application.Initialize;
  (...)
end.

Assim que encerrar a aplicação, será mostrada a mensagem com os vazamentos de memória ocorridos durante a execução.

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

7 minutos atrás, BigWings disse:

A quantidade de memória que o Windows mostra como alocada para o seu programa não é necessariamente a memória que ele está usando. O sistema operacional faz algumas "mágicas" para compartilhar a memória entre os processos e nem sempre vai liberar memória quando você desaloca objetos. A solução do xyberx vai forçar o Windows a recalcular a memória alocada para o seu processo, isso pode causar problema de performance, dependendo do uso.

Para identificar se está havendo memória não desalocada, a melhor forma é usar o FastMM.

Coloque em algum lugar no seu programa, pode ser no .dpr mesmo, logo após o begin:


begin

  ReportMemoryLeaksOnShutdown := True;

  Application.Initialize;
  (...)
end.

Assim que encerrar a aplicação, será mostrada a mensagem com os vazamentos de memória ocorridos durante a execução.

 

Bom dia no meu aplicativo ja uso o ReportMemoryLeaks e não apresenta nenhuma mensagem de vazamento de memoria.

26 minutos atrás, xyberx disse:

Use isso que vai limpar a memoria nao utilizada por sua app

 


procedure TrimAppMemorySize;
 var
   MainHandle : THandle;
 begin
   try
     MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
     SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
     CloseHandle(MainHandle) ;
   except
   end;
   Application.ProcessMessages;
 end;

testei aqui realmente diminui a memoria mais como nosso amigo BigWings citou acima A solução do xyberx vai forçar o Windows a recalcular a memória alocada para o seu processo, isso pode causar problema de performance, dependendo do uso. fico na duvida sobre esse comando no dia a dia. Pois dei uma procurada e achei varios relatos sobre esse comando alguns a favores e outros contra. entao por enquanto não vou usar esse comando vou tentar testar mais para ver o que realmente acontece se alguem mais tem experiencia com esse e comando e quiser postar aqui o resultado ficarei grato.

Link para o comentário
Compartilhar em outros sites

 Eu uso ele há um ano num WS que nunca desligo com meu REST DW, tudo ok.

 Caso queira testar coloque e veja por si só, se for eficiente para vc use. Assim penso no dia a dia mais pode olhar direito mesmo pq sistemas são como pão, cada um gosta de um jeito e sabor kkkkk.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, xyberx disse:

 Eu uso ele há um ano num WS que nunca desligo com meu REST DW, tudo ok.

 Caso queira testar coloque e veja por si só, se for eficiente para vc use. Assim penso no dia a dia mais pode olhar direito mesmo pq sistemas são como pão, cada um gosta de um jeito e sabor kkkkk.

Vou testar sim. Obrigado.

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2565 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...