
当我使用“Forms”调试一个简单的应用程序时,我每次都有3行内存泄漏.
This application has leaked memory.
The small block leaks are (excluding
expected leaks registered by pointer):13 – 20 bytes: TObjectList x 3,
UnkNown x 3 29 – 36 bytes:
TWinHelpVIEwer x 1 37 – 52 bytes:
THelpManager x 1
这是正常的吗?
哪件事导致了这个?
谢谢:
DD
您需要做的是使用FastMM注册这些已知和预期的内存泄漏.一旦您注册了FastMM将不会报告它们的泄漏.虽然这些泄漏是真实的,但出于各种原因,它们最好被忽略:
>这些已知VCL泄漏的泄漏记忆很小,并且在过程的生命周期内不会增长.
>无论如何,只要进程终止,内存就会返回系统.
>由于泄漏是在您无法控制的代码中,因此您无法做到这一点.您可以修复它们并使用您自己版本的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 1FastMM4.RegisterExpectedMemoryLeak(20,7); // TObjectList x 3,THelpSelector x 1,UnkNown x 3FastMM4.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中使用的确切单位以及如何使用它们,您可能需要注册不同的内存泄漏.
总结以上是内存溢出为你收集整理的FastMM4,Delphi6,TApplication泄漏?全部内容,希望文章能够帮你解决FastMM4,Delphi6,TApplication泄漏?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)