2010-11-16

Memory Leak 通知

在 D2009 中有一個簡易的 Memory Leak 通知功能,只要將一行程式碼加到專案的最前頭、就可。點擊目錄 Project \ View Source:如下:
begin
  // 就是這行 Memory Leak 通知在程式 Shutdown 時。
  ReportMemoryLeaksOnShutdown := DebugHook <> 0;

  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.
測試在宣告一個 TStrings,如下
private
    FStrs: TStrings;
    { Private declarations }
測試在 FormCreate 中透過 TStringList.Create 建立,如下:
procedure TForm1.FormCreate(Sender: TObject);
var
  ii: Integer;
begin
  FStrs := TStringList.Create;

  for ii := 0 to 500 do
    FStrs.Add('Line ' + IntToStr(ii));

  Memo1.Lines.Text := FStrs.Text;
end;
測試在 FormDestroy 中沒有釋放記憶空間,如下:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  // 假設忘記釋放變數記憶空間!
  //FreeAndNil(FStrs);
end;
如以上測試的話,在程式關閉後就會看到如下的 Memory Leaks Report,如下:
在剛開始的時候也很有趣、挖、有這麼方便的內容。可是當您的大程式要找出所有的 Memory Leaks,我想你就會知道有多麼的不有趣了。DebugHook 是系統提供的一個變數,讓程式可以透過這麼變數知道目前的執行狀態是在 IDE 開發環境中、或者不是。

Leak

沒有留言: