删除动态控件后,为何不释放内存? (50分)

  • 主题发起人 coolnerd
  • 开始时间
C

coolnerd

Unregistered / Unconfirmed
GUEST, unregistred user!

窗体上放置一个Panel,两个Button,代码如下,
按Button1往Panel上动态添加按钮时,从资源任务管理器中,看到Project1的内存不断
在增加,但按Button2依次将动态生成的Button释放后,为何内存使用量没有减下来啊?

procedure TForm1.FormCreate(Sender: TObject);
begin
button1.Caption :='Create';
button2.Caption :='Free';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
newButton:TButton;
begin
newButton:=TButton.Create(self); //在Panel上创建按钮
with newButton do begin
Parent :=Panel1;
Top :=(Panel1.ControlCount-1)*25; //顺序排开
Left :=0;
Caption :=timeToStr(now);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
begin
for i:=panel1.ControlCount -1 downto 0 do begin
panel1.Controls.Free; //删除控件
end;
end;

 
我记得删除控件的父控件就会完全释放 你不如直接把panel释放 再放一个在上面
 
用newButton:=TButton.Create(nil);不要用self,否则由form负责内存的释放。
 
这可能和Delphi的内存管理机制有关...
 
Owner不为空的话,由Owner负责组件内存的释放。
 
我试了一下各位的说法,可是还是不能达到我想象的效果。
To:大致若鱼 创建的时候Owner置空,但释放的时候资源任务管理器中仍然没有见使用内存减下来,
但发现再次创建的时候,使用的内存不再增加,除非再次创建的对象比上一次
多。
 
可是我用TButton.Create(self)的时候free内存不会减,
用TButton.Create(nil)的时候free内存就减下来了。
你再试试看
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
686
import
I
顶部