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

varArrayCreate 是否會自動釋放問題

答題得分者是:timhuang
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 17:30:26 IP:61.30.xxx.xxx 未訂閱
請教各位前輩一個問題,varArrayCreate 產生的,是否在結束時,會自動釋放; 如下:
    var AA :OleVariant;    begin
  AA :=VarArrayCreate([0, 5], varVariant);
  AA[0] :='1234';
  AA[1] :=111;
  .......    end;    [Code]    看了好多範例,都沒有任何程式碼作釋放的動作,是否表示,不需要釋放,而系統會自動做釋放的動作呢?    若是需要自己手動釋放的話,是該如何寫呢?為何很多範例都不需要做釋放的動作呢?    是否如下是做釋放的動作:    [Code]
 AA :=VarArrayCreate([0, 5], varVariant);
 try
 finally
   VarArrayRedim(AA, 0 );
   if (not varIsEmpty(AA)) then begin
     VarClear(AA);
   end;
   
 end;
謝謝各位前輩! GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統)
http://www.allgps.com
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-04 20:29:14 IP:219.81.xxx.xxx 未訂閱
應該是可以用 finalize 來釋放。
timhuang
尊榮會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-04 21:34:00 IP:220.132.xxx.xxx 未訂閱
Hi, varArrayCreate 是利用 SafeArrayCreate 這個 OLE AUTOMATION 的 API 來產生的一個 SafeArray, 所以理所當然是可以利用 SafeArrayDestroy 來釋放的, 但是在 delphi 中此 function 並未開放.    這類的變數如同 com 一般, 若是沒有參考指向時, 自然會自行釋放, 不過若要手動釋放也不是沒有辦法, 可以利用    
var AA :OleVariant;    begin
  AA :=VarArrayCreate([0, 5], varVariant);
  AA[0] :='1234';
  AA[1] :=111;
  AA := Unassigned;    end;
若要問這樣就可以釋放嗎? 試著追一下 source code, 相信很快你就會得到解答!
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-04 22:31:19 IP:61.225.xxx.xxx 未訂閱
引言: Hi, varArrayCreate 是利用 SafeArrayCreate 這個 OLE AUTOMATION 的 API 來產生的一個 SafeArray, 所以理所當然是可以利用 SafeArrayDestroy 來釋放的, 但是在 delphi 中此 function 並未開放. 這類的變數如同 com 一般, 若是沒有參考指向時, 自然會自行釋放, 不過若要手動釋放也不是沒有辦法, 可以利用
var AA :OleVariant;    begin
  AA :=VarArrayCreate([0, 5], varVariant);
  AA[0] :='1234';
  AA[1] :=111;
  AA := Unassigned;    end;
若要問這樣就可以釋放嗎? 試著追一下 source code, 相信很快你就會得到解答!
感謝兩位前輩的回答,如timhuang前輩所言,先前我也的確在程式裡面有加入 此行AA := Unassigned; 因此也相信它會自動釋放掉! 會如此問是因為我有一個程式由於是24小時全天候執行的,且發現它會一直吃記憶體,但,實在想不出是那裡的問題!用Snoop也找不出問題所在。 此程式每次要求進來時,都會產生一個Thread來處理,處理結束後自動釋放(FreeOnTerminated ==>True),而在此Thread裡面會用到VarArrayCreate、ADO、DCOM......等之類的,裡面用到的物件都是動態產生,並最後都會做釋放的動作(FreeAndNil(XXX);) 不確定是否為此,因此,才懷疑是不是VarArrayCreate的問題。 看來,我還要找找其它的地方了! 感謝兩位前輩的回答! GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統)
http://www.allgps.com
系統時間:2024-06-02 1:21:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!