線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2899
推到 Plurk!
推到 Facebook!

我該如何來釋放FORM資源

尚未結案
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-17 14:43:00 IP:60.250.xxx.xxx 訂閱
我有個MAINFORM名稱叫FORM1
然後還有FORM2及FORM3兩個FORM
在FORM1有個TLMDFormDisplay的元件,用來顯示其它的FORM用,還有一個TPAGECONTROL
程式碼如下:


[code delphi]

procedure TForm1.DisplaySimpleForm(ccFormClass:TComponentClass);
begin
try
fdMainScreen.UnLoad();
fdMainScreen.Parent := PageControl1.ActivePage;
fdMainScreen.Execute(TForm(ccFormClass.Create(Application)));
except
exit;
end;

end;
procedure TForm1.PageControl1Change(Sender: TObject);
begin
Screen.Cursor := crHourGlass ;
try
case PageControl1.ActivePageIndex 1 of
1 :
DisplaySimpleForm(TForm2 );
2 :
DisplaySimpleForm(TForm3 );
3 :
fdMainScreen.UnLoad();
end;
finally
Screen.Cursor := crDefault ;
end;
end;
[/code]

但問題是當TLMDFormDisplay元件開過的FORM,UnLoad釋放都無用,還是會佔用記憶體,我看FORM2都有跑到FORM.Destroy事件,但釋放無效不知為什麼.
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-27 00:06:43 IP:61.67.xxx.xxx 未訂閱
最直接的方式, 在每一個child form 的 onclose寫

Action:= Free;
FormX:= nil;

這是我常用的方法
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-22 04:53:02 IP:115.82.xxx.xxx 訂閱
我都寫Action=CaFree;
不知道Free跟CaFree有什麼差別@@

===================引 用 P.D. 文 章===================
最直接的方式, 在每一個child form 的 onclose寫

Action:= Free;
FormX:= nil;

這是我常用的方法
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-22 22:53:47 IP:59.124.xxx.xxx 訂閱
當你不知道的時候,最快的方法就是把Debug Unit打開,然後狂按F7,就會發現了..
如果發現了,卻還是不知道在作什麼,再貼上來問,會是不錯的互動。

我個人的想法是,只要確定觸發destructor,就不需要再去管到底有沒有被釋放,這個交給Delphi的架構來處理就好,因為這牽涉到記憶體管理的方式,有時候會像是java一樣,在適當時機才會直接還給OS,剩下的可以留著下次用,這種的管不著。(如果自己有override destructor,要記得inherited 讓上層的destructor也有被執行就是了)
當然,若是在該instance中自己使用constructor或new建立的instance,就至少應該自己在destructor中確保被釋放。

===================引 用 frappe 文 章===================
我都寫Action=CaFree;
不知道Free跟CaFree有什麼差別@@

===================引 用 P.D. 文 章===================
最直接的方式, 在每一個child form 的 onclose寫

Action:= Free;
FormX:= nil;

這是我常用的方法
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
編輯記錄
Coffee 重新編輯於 2009-02-22 22:56:39, 註解 無‧
Coffee 重新編輯於 2009-02-22 22:57:48, 註解 無‧
Coffee 重新編輯於 2009-02-22 23:11:48, 註解 無‧
Coffee 重新編輯於 2009-02-22 23:12:52, 註解 無‧
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-23 16:53:08 IP:61.222.xxx.xxx 訂閱
CaFree 告訴 Delphi Form Close 後就要釋放資源。
XX.Free 是直接釋放該物件資源。不一樣地

FormX =Nil 目的將公用變數指針指向 NIL
避免重新判斷時會造成 ACCE. ...V .... 問題。


===================引 用 frappe 文 章===================
我都寫Action=CaFree;
不知道Free跟CaFree有什麼差別@@

===================引 用 P.D. 文 章===================
最直接的方式, 在每一個child form 的 onclose寫

Action:= Free;
FormX:= nil;

這是我常用的方法
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-08-21 16:20:42 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-11-23 5:46:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!