全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1218
推到 Plurk!
推到 Facebook!

请问为何一些窗体在FREE后系统资源并未释放

尚未結案
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-29 17:36:09 IP:218.2.xxx.xxx 未訂閱
请问为何一些窗体在FREE后系统资源并未释放,而要等到整个APPLICATION结束才释放 發表人 - jackalan 於 2004/03/29 20:18:50
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-29 17:48:59 IP:218.2.xxx.xxx 未訂閱
我发现并非所有窗体都不释放,只是部分不释放。。。这是最晕的地方 發表人 - jackalan 於 2004/03/29 20:19:57
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-29 21:07:26 IP:218.32.xxx.xxx 未訂閱
jackalan 你好: 可能是為了速度吧, 改用 "FreeAndNil" 看看.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-30 02:10:05 IP:203.204.xxx.xxx 未訂閱
引言: 我发现并非所有窗体都不释放,只是部分不释放。。。这是最晕的地方
jackalan 你好 我認為應該是從FormShow到釋放的過程中,有某些自行建立的物件、複合結構或陣列在Form釋放前未予以手動釋放,而殘留在記憶體中,另外與Form同個UNIT中宣告的公用物件變數或陣列於Form存在期間建立或配置的記憶體,也不會隨Form的釋放而釋放。供你參考
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-01 20:54:19 IP:221.226.xxx.xxx 未訂閱
谢谢上面两位! Chance36您说的太对了,但因为该窗口很复杂,我也搞不清楚到底要释放什么,有没有什么通用的方法,因为我个人认为一个好的程序除了在完成它全部功能外对系统资源的控制也很重要。。。请指教。
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-01 21:57:30 IP:211.20.xxx.xxx 未訂閱
引言: 谢谢上面两位! Chance36您说的太对了,但因为该窗口很复杂,我也搞不清楚到底要释放什么,有没有什么通用的方法,因为我个人认为一个好的程序除了在完成它全部功能外对系统资源的控制也很重要。。。请指教。
jackalan 你好 就我所知的部份,以下敍述供你參考,若有謬誤請各位先進不吝指教 1.所有的.Create 在相對結束位置應該要有.Free的動作,除非物件的OWNER會幇忙釋放 2.相對位置指的是變數(物件)離開可視範圍之前,如在Form.ONCreate 建立,至少在Form.Destory要釋放,在程序內建立者則離開程式前要釋放(注意If判斷不要有漏洞及Exit或Break宊然跳離的動作) 3.動態Form的建立若Owner為Applcation則你可不用理它,Application會釋放的,或自行釋放亦可 4.動態Form的建立若Owner為nil則必須自行釋放,最好用完就釋放,除非你會多次使用,但要注意不可重複建立(加個If Not Assigned(xxx) Then ...) 5.你有用New或GetMem..Alloc??? ...等記憶體的配置的功能同樣要在相對位置予以釋放 6.對於Record型態,若其內元素僅是一些Delphi的基本型態如Integer,Double,String,PChar等可以不用理它,若其內包File,TObject..則最好還是要有釋放的動作。 我也從來沒有如此整理過這個注意事項,僅以目前想到的隨手記錄下來,希望還有點幫助。若有遺漏,亦請各位先進予以加強補充。先行謝過!謝謝!!
jackalan
初階會員


發表:20
回覆:88
積分:36
註冊:2003-11-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-02 13:04:51 IP:202.102.xxx.xxx 未訂閱
谢谢Chance36的鼎力帮忙,问题得到解决,因为我在窗口中建立另一个窗体时使用了NIL,所以当前窗口释放时不会释放它,多谢多谢。
系統時間:2024-05-17 3:38:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!