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