segunda-feira, 1 de outubro de 2007

Memory Leak ou vazamento de memória


Ocorre quando criamos um objeto e não damos free. Isto vai consumindo memória do Windows e, dependendo do caso, pode deixar o programa lento e travar.

Como saber se eu fui bastante inteligente de ter criado um objeto e esquecido de dar free?

Delphi 2006 é a solução para seus problemas!

Simplesmente no create do form principal adicione a linha:

ReportMemoryLeaksOnShutdown := True;

Que ao fechar o programa, se algum objeto vazou a memória será exibido um ShowMessage com informações sobre isso.

Para testar crie um novo projeto com um form + button. Vamos simular um vazamento de memória, criaremos um TStringList mas não daremos free.

procedure TForm1.Button1Click(Sender: TObject);
var
L: TStringList;
begin
L:= TStringList.Create;
end;

Se rodarmos o projeto e clicarmos no botão, nada acontece ao fechar o form. Agora adicione a seguinte linha ao projeto e repita o processo:

ReportMemoryLeaksOnShutdown := True;

Ao fechar o form é exibida uma ShowMessage com as seguintes informações:

Unexpected Memory Leak
An unexpected memory leak has occurred. The unexpected small block leaks are:
53 - 60 bytes: TStringList x 1

Percebeu? ele indica que o problema é um StringList. (1 unidade).


  © Blogger template 'Perfection' by Ourblogtemplates.com 2008

Back to TOP