<< Click to Display Table of Contents >> Memory Leaks - detectando |
![]() ![]() ![]() |
Definição
Memory Leak = 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
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.
Exemplo
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). Fazendo isso conseguiremos fazer programas perfeitos e sem bugs
(hahahah).