dur*_*ara 4 forms memory delphi memory-leaks fastmm
我用D6检查了FastMM4.当我使用"Forms"调试一个简单的应用程序时,我每次都有3行内存泄漏.
此应用程序已泄露内存.小块泄漏(不包括指针注册的预期泄漏):
13 - 20字节:TObjectList x 3,未知x 3 29 - 36字节:TWinHelpViewer x 1 37 - 52字节:THelpManager x 1
这是正常的吗?
哪件事导致了这个?
谢谢:dd
Dav*_*nan 10
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
Run Code Online (Sandbox Code Playgroud)
我还有一个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;
Run Code Online (Sandbox Code Playgroud)
根据您在RTL/VCL中使用的确切单位以及如何使用它们,您可能需要注册不同的内存泄漏.
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |