【发布时间】:2014-09-02 15:10:47
【问题描述】:
在 Delphi XE6 中,我有一个名为 WordDict 的 TDictionary,它包含 TWordRec 的实例。定义是:
WordDict: TDictionary<string, TWordRec>;
...
type
TWordRec = class
public
RemoveAlways: Boolean; // Is this CORP LLC, etc?
RemoveRestricted: Boolean;
Replace: Boolean;
ReplaceWith: string;
Constructor Create(B1, B2, B3: Boolean; S1: String); overload;
end;
当我创建和加载字典时......
WordDict := TDictionary<string, TWordRec>.Create;
WordDict.Add('CO', TWordRec.Create(True, False, False, ''));
WordDict.Add('CORP', TWordRec.Create(True, False, False, ''));
...
我遇到了内存泄漏,并且使用 AQTime,它显示我的 TWordRec 的每次出现都是“泄漏”内存。如果我将 WordDict 条目创建为 TWordRec,加载后如何处理它们?我要处理它们吗,因为这不只是字典中指向实际对象的指针吗?
我是否在加载后立即处理掉 TWord?只有当应用程序关闭时,我才从我的字典中删除所有条目吗?我显然不明白为什么我在 TWordRec 上出现内存泄漏,所以我不知道如何解决它......
谢谢!
【问题讨论】:
-
由于您使用的是类而不是记录,您可以考虑使用
TObjectDictionary并使用[doOwnsValues]创建它 -
我猜,在你释放字典实例之前,你必须遍历它的 Items 属性,释放你放入的每个 TWordRec 实例。
标签: class delphi memory-leaks tdictionary