控件的FREE问题 (50分)

  • 主题发起人 主题发起人 虾仔
  • 开始时间 开始时间

虾仔

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.btnSendClick(sender:tobject);
var
strContents:TStringList;
nmsmtp2:tnmsmtp;
mysyspath:pchar;
syspath:string;
begin
strContents:=TStringList.Create;
nmsmtp2:=tnmsmtp.create(form1);
with nmsmtp2 do
begin
port:=25;
host:='smtp.gdgz.cnuninet.net';
onconnect:=nmsmtp2connect;
end;



//中间没用到其它的控件和过程,只是对nmsmtp2的操作


nmsmtp2.Free;
strcontents.Free;
end;


为什么我每次调用上面的过程占用的内存都增加?
 
可能是指针没有释放掉吧
试试 strcontents:=nil 的写法
 
FreeAndNil(nmsmtp2);
 
用两个try....finally ...end;封装一下
strContents := TStringList.Create;
try
nmsmtp2 := tnmsmtp.create(form1);
try
with nmsmtp2 do
begin
port := 25;
host := 'smtp.gdgz.cnuninet.net';
onconnect := nmsmtp2connect;
end;
.....
//中间没用到其它的控件和过程,只是对nmsmtp2的操作
.....
finally
nmsmtp2.Free;
end;
finally
strcontents.Free;
end;
 

我想可能某些地主你创建了一些对象,但你没有显示地删除它。
你可以将其赋值为 Nil看看。
 
我也有同樣的問題.
還有:
1.為何 Application.Minimize 時回釋放大量Memory,再Restore 時都不回還原?
2.窗體釋放後為何其佔用的 Memory 不回完全釋放掉.我時這樣作的;
如:
form1:= Tfrom1.Create(Self);
form1.Show;
在form1的 Destory 事件中 有
form1:= nil ;
在form1的 Close 事件中 有
Action:= CaFree;
用Close 方法關閉窗體的.

-------------------------------------------
[:)]不好意思,虾仔兄,佔你寶地一用,我再出100 分.
 
to pcc_mmz1 ; 赋值为 Nil 只是將指向他的指針不再指向他吧,這樣也不會釋放掉他呀.
 
好象nil不是这个意思吧!!!
 
to ysai:我刚试了一次,不行。
to Distachio:设为nil试过了,不行。
to pcc_mmz1:运行当中没运行其它过程,只执行btnsendclick,而且其中也没涉及其它控件。
to svw056:应该和你说的没关系,因为执行中没出什么异常。
 
我刚才跟踪了一下,发现TStringList分配的内存很少,Tnmsmtp分配有96K,但FREE的时候只释放了76-80K
所以第次调用都有16-20K的增加。
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部