关于程式占用资源的问题? |
尚未結案
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
我写了一个函数(如下):
Function GetNameList(aStr : String) : TStringList;
函数返回的是一个TStringList,而这个函数是在一个Button的OnClick时间中调用,不知道这个函数创建的TStringList是否在Button的OnClick事件执行完就自动释放?要是不释放的话,那么经常调用这个函数,那么系统资源有可能被它占用。要是那样的话,该怎么释放呢?不知道是否是我这样想的?
请各位高手指点指点? ============================================= 知识来源于学习和交流!
我是菜鸟!
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
一般若傳回的資料是 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |