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

关于程式占用资源的问题?

尚未結案
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-03 21:36:24 IP:218.6.xxx.xxx 未訂閱
我写了一个函数(如下): Function GetNameList(aStr : String) : TStringList; 函数返回的是一个TStringList,而这个函数是在一个Button的OnClick时间中调用,不知道这个函数创建的TStringList是否在Button的OnClick事件执行完就自动释放?要是不释放的话,那么经常调用这个函数,那么系统资源有可能被它占用。要是那样的话,该怎么释放呢?不知道是否是我这样想的? 请各位高手指点指点? ============================================= 知识来源于学习和交流! 我是菜鸟!
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-03 21:48:04 IP:218.6.xxx.xxx 未訂閱
顺便问一句:若要完全释放一个Form所占的资源,是否是下面的代码: Form.Free; Form := Nil; 上面两行代码能否完全释放Form所占的资源? ============================================= 知识来源于学习和交流! 我是菜鸟!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-03 22:32:20 IP:61.62.xxx.xxx 未訂閱
一般若傳回的資料是 object 的話, 相對的, 也會使用 create 來建立, 如此一來便會面臨資源佔用的問題, 比較理想的解決方法, 是這樣子來操作:    
function GetStr(str: string): TStringList;
begin
  Result := TStringList.Create;
  Result.Text := str;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  a: TStringList;
begin
  a:= GetStr('222');
  ShowMessage(a.Text);
  a.Free;
end;
利用一個變數 a 來取得回傳值(由於是 object, 在 delphi 中其實是複製指標而已), 如此一來, 便可以在使用後 free 該 object 了, 就不會有資源被佔用的現象了. 另外一種可行的作法, 是改用 var 傳入的方式來作, 如此一來, 就更容易維護, 而不需要一再的建立和釋放, 如下:
procedure GetStr2(str: string; var retstr: TStringList);
begin
  retstr.Text := str;
end;    procedure TForm1.Button2Click(Sender: TObject);
var
  a: TStringList;
begin
  a := TStringList.Create;
  GetStr2('333', a);
  ShowMessage(a.Text);
  a.Free;
end;
ps. 此處因為傳入的是 TStringList , 所以加不加 var (Variable Parameter: passed by reference), 都是會以 passed by reference 的, 有興趣可以自行測試一下即可明白. 另外你問到釋放 Form 所佔資源, 確實是可以透過 Form.Free; Form := nil; 來進行的沒錯, 也可以直接使用 FreeAndNil Function 達到相同的功效哦~
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-10 19:59:54 IP:218.6.xxx.xxx 未訂閱
谢谢timhuang老师!让我明白了许多! 谢谢! ============================================= 知识来源于学习和交流! 我是菜鸟!
系統時間:2024-06-28 22:41:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!