procedure TList<T>.Clear;
begin
Count := 0;
Capacity := 0;
end;
destructor TQueue<T>.Destroy;
begin
Clear;
inherited;
end;procedure TQueue<T>.Clear;
begin
while Count > 0 do
Dequeue;
FHead := 0;
FTail := 0;
FCount := 0;
end;destructor TStack<T>.Destroy;
begin
Clear;
inherited;
end;procedure TStack<T>.Clear;
begin
while Count > 0 do
Pop;
SetLength(FItems, 0);
end;
procedure TDictionary<TKey,TValue>.Clear;
var
i: Integer;
oldItems: TItemArray;
begin
oldItems := FItems;
FCount := 0;
SetLength(FItems, 0);
SetCapacity(0);
FGrowThreshold := 0;
for i := 0 to Length(oldItems) - 1 do
begin
if oldItems[i].HashCode = 0 then
Continue;
KeyNotify(oldItems[i].Key, cnRemoved);
ValueNotify(oldItems[i].Value, cnRemoved);
end;
end;Generics.Collections 单元里面找到 的delphi 2010 xe2一直都是这样的 。clear的时候根本不释放内存,导致内存不断的增加
clear越多 内存泄露越大,太没天理了 都过去这么多年了,一直都没改变
也不知道这里怎么修改。求高手帮忙看一下 ,这个clear究竟应该怎么 修改 才能保证内存不再泄露。谢谢大家了。
我的积分也快没了,不过我还是全部都拿出来了,希望大可以帮下,非常非常感谢。Delphi内存泄露2010内存
解决方案 »
- 起名 汪姓 女孩 非诚勿进
- 全局钩子拦截系统待机消息,如何判断拦截的消息是否待机消息
- 如何在SQL中建立字段链接到实际硬盘文件
- 关于DBGRIDeh的同列复制问题。。。。大家一定要帮我啊。。
- winVNC被瑞星禁止的问题
- LMDPopupmenu控件如何找到?
- 密码在数据库(SQL SERVER)中的存在形式为<binary>的问题
- 请问关于TQRDBText内中文本换行的问题
- 用batchmove怎么把一个表的每条纪录选择两个字段复制到一个表里边呢?
- 请问哪儿有Delphi6.0的控件下载?
- 有个需求,怎么把导出为excel文件改为导出为wps文件
- delphi xe4 可以支持微软wp 和安卓的移动应用的开发吗?
-------------可不可以告诉我 怎么转变 非常感谢
------------水平是菜鸟级的,不担心别人耻笑,不懂得就问么。谁都从不懂得开始。
这个TObjectList<T> 怎么使用?希望发个例子。谢谢了
===============================================================
感谢两位回复,自知自己是菜鸟级的,发出来也别人笑话也没关系。关键是想怎样解决这个问题。
非常感谢两位给的一些提示,谢谢
只说普通Tlist,它的clear应该是只清除列表项,至于列表项所指的内容,自然是不敢随便清除的
它怎么知道列表项所指的内容,是不是还有别的代码会使用
如果开发者知道没人使用了,应该清除,在clear之前,自行循环清除好了
1. 方法一: 你添加一个TList或TStringList,把你加的对象放到列表里管理,然后循环释放,TDictionary我一般这样处理。
2. 方法二:
var
vList: TList<TObject>;
i: integer;
begin
vList := TList<TObject>.Create;
for i := vList.Count - 1 downto 0 do
begin
vList.Items.Free;
vList.Delete(i);
end;
vList.Free;
end;