Delphi 2009 – 接口属性是否会导致内存泄漏?
发布时间:2020-12-15 09:37:26 所属栏目:大数据 来源:网络整理
导读:我继承了一个Intraweb应用程序,它有一个2MB的内存泄漏文本文件,如FastMM4所报告的那样.我已经把它归结为一个类泄漏了52个字节的115个实例. 坏演员的简要描述是: TCwcBasicAdapter = class(TCwcCustomAdapter) protected FNavTitleField: TField; function G
我继承了一个Intraweb应用程序,它有一个2MB的内存泄漏文本文件,如FastMM4所报告的那样.我已经把它归结为一个类泄漏了52个字节的115个实例.
坏演员的简要描述是: TCwcBasicAdapter = class(TCwcCustomAdapter) protected FNavTitleField: TField; function GetAdapterNav(aDataSet: TDataSet): ICwcCDSAdapterNav; override; public constructor Create(aDataSource: TDataSource; aKeyField,aNavTitleField: TField; aMultiple: boolean); end; 界面是: ICwcCDSAdapterNav = interface(IInterface) 我吵了一棵错误的树,因为这个属性被引用计算了吗?在任何情况下,接口属性都可以防止类被破坏吗? 以下是上述方法的实现: function TCwcBasicAdapter.GetAdapterNav(aDataSet: TDataSet): ICwcCDSAdapterNav; var AdapterNav: TCwcCDSAdapterNavBase; begin result := nil; if Assigned(aDataSet) then begin AdapterNav := TCwcCDSAdapterNavBasic.Create(aDataSet,FKeyField.Index,FNavTitleField.Index); try AdapterNav.GetInterface(ICwcCDSAdapterNav,result); except FreeAndNil(AdapterNav); raise; end; end; end; 将类声明为: TCwcCDSAdapterNavBase = class(TInterfacedObject,ICwcCDSAdapterNav) 解决方法
FastMM应该为您提供泄漏的内容和创建的位置.
这将有助于将其缩小到真正的罪魁祸首:谁在泄漏什么? 我不确定你的问题到底是什么? 编辑:没有看到你的Object的代码实现ICwcCDSAdapterNav,我们无法判断它是否确实是引用计数. 您可能需要查看此CodeRage 2会话:Fighting Memory Leaks for Dummies.它主要说明如何使用FastMM来防止/检测Delphi中的内存泄漏.适用于D2007,但仍适用于其他版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |