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内存
解决方案 »
- 采用ole方式导出的Word表格,为什么表格是虚框?虚框打印不出来。(急)
- ado + oracle9.2.0.1.0连接后看不到任何表?
- 在DLL中可以操纵XML,取出IXMLNODE结点吗?
- 各位老大.给介绍一下.DELPHI哪个版本最好.
- 代码解释
- 关于多人开发的代码管理。既 Team Source 的使用问题。
- FastReport的问题,怎样不用预览界面,按打印按钮直接打印怎么做?
- 关于更新表中的记录用sql.add该怎末写?
- 关于TDBNavigator的问题
- 用zint.all生成二维码,内容不会换行
- 有个需求,怎么把导出为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;