Quando você cria uma aplicação Delphi, tudo é um objeto, o Formulário é um objeto, cada objeto ocupa um espaço da memória gerenciado pelo programa após ser instanciado. E todo objeto após ser utilizado deve ser destruído para que esta memória seja liberada…
O que a maioria dos programadores não sabem é que, especificamente em Delphi que não existe “Coletor de Lixo de memória” como na plataforma .NET. Existe uma memória residual que nunca é liberada mesmo que você destrua todos os objetos que instanciar, porque é uma parta da memória que é administrada pelo próprio Sistema operacional. Se você deixar o seu aplicativo aberto, e efetuar diversas ações que interajam com as APIs do Windows ou DLL externas, trabalhar multi-camadas através de sockets…. Ou mesmo fazer movimentos simples como minimizar ou maximizar sua aplicação… Você perceberá que memória reservada no gerenciador de tarefas para o processo do seu executável crescerá. E muitos destes movimentos como maximiza e minimizar, é a parte não gerenciável da memória de sua aplicação pois ela ocorre na própria interação do Sistema Operacional com sua aplicação.
Este procedimento localiza o processo da aplicação, e limpa toda memória residual…
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;
Retirado de:
http://www.agnaldocarmo.com.br/home/comando-milagroso-para-reducao-de-memoria-delphi/
Nenhum comentário:
Postar um comentário