FastMM4,Delphi6,TApplication泄漏?
我用D6检查了FastMM4.
当我使用“Forms”调试一个简单的应用程序时,我每次都有3行内存泄漏.
这是正常的吗? 哪件事导致了这个? 谢谢: 解决方法
Delphi 6附带的RTL / VCL包含一些内存泄漏.在Delphi的后续版本中,使用FastMM导致从RTL / VCL中删除这些内存泄漏.
您需要做的是使用FastMM注册这些已知和预期的内存泄漏.一旦您注册了FastMM将不会报告它们的泄漏.虽然这些泄漏是真实的,但出于各种原因,它们最好被忽略: >这些已知VCL泄漏的泄漏记忆很小,并且在过程的生命周期内不会增长. 这些泄漏可能最重要的唯一一次是,如果您在该过程的生命周期中有一个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中使用的确切单位以及如何使用它们,您可能需要注册不同的内存泄漏. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |