[英]FastMM4, Delphi6, Leak of TApplication?
我用D6檢查了FastMM4。 當我使用“Forms”調試一個簡單的應用程序時,我每次都有3行內存泄漏。
此應用程序已泄露內存。 小塊泄漏(不包括指針注冊的預期泄漏):
13 - 20字節:TObjectList x 3,未知x 3 29 - 36字節:TWinHelpViewer x 1 37 - 52字節:THelpManager x 1
這是正常的嗎?
哪件事導致了這個?
謝謝:dd
Delphi 6附帶的RTL / VCL包含一些內存泄漏。 在Delphi的后續版本中,使用FastMM導致從RTL / VCL中刪除這些內存泄漏。
您需要做的是使用FastMM注冊這些已知和預期的內存泄漏。 一旦您注冊了FastMM將不會報告它們的泄漏。 雖然這些泄漏是真實的,但出於各種原因,它們最好被忽略:
這些泄漏可能最重要的唯一一次是,如果您在該過程的生命周期中有一個DLL在相同的進程中加載和卸載了數千次。 我不相信這是一個非常現實的場景。
如果您沒有注冊泄漏,那么FastMM泄漏報告在很大程度上是無效的,因為它每次都會顯示。 如果每次你學會忽略它就會顯示出來。 這種泄漏報告非常有價值,但只有當它顯示您可以控制的泄漏時才有價值。
在我的Delphi 6項目中,我在.dpr文件中有以下代碼:
// Register expected VCL memory leaks caused by Delphi unit HelpIntfs.
FastMM4.RegisterExpectedMemoryLeak(36, 2); // THelpManager x 1, THTMLHelpViewer x 1
FastMM4.RegisterExpectedMemoryLeak(20, 7); // TObjectList x 3, THelpSelector x 1, Unknown x 3
FastMM4.RegisterExpectedMemoryLeak(52); // TWinHelpViewer x 1
我還在TForm
后代中有以下內容,我的應用程序中的所有表單都從該后代下降:
var
ExpectedHelpStringMemoryLeakRegistered: Boolean;
procedure TMyForm.WMHelp(var Message: TWMHelp);
begin
if not (biHelp in BorderIcons) and not ExpectedHelpStringMemoryLeakRegistered then begin
// Register expected VCL memory leaks caused by Delphi unit HelpIntfs.
FastMM4.RegisterExpectedMemoryLeak(44); // TString x 1
ExpectedHelpStringMemoryLeakRegistered := True;
end;
inherited;
end;
根據您在RTL / VCL中使用的確切單位以及如何使用它們,您可能需要注冊不同的內存泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.