TStingList 與 Array 的差別 |
答題得分者是:jimmy_wei
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位一個觀念上的問題 myArray: Array of string;
myString: TStringList; 兩者宣告 SetLength(myArray,10)
與
myString.Items.Add(10筆) 1.何者在處理的效能上比較好
2.何者比較佔用windows資源
3.在onCreate 中建立
myString:= TStringList.Create;
SetLength(myArray,10);
在 onClose中
有下myString.Free及不下似乎有很大的差別(當再次進入程式比較容易造成當機)
但使用myArrry, 即使在onClose 不做Setlength(myArray,0) 也不會怎樣,
這差別在那? 會提這個問題, 是因為我稍早用TstringList, 但似乎很不穩定, 經常出現
Access 的存取錯誤, 改用Array就好了 我的測試環境是 win98se delphi5
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
1) I think array is more efficient
2) TStringList
3) I think the compiler do the freeing when myArray goes out of scope. Anyway freeing it manually makes a good habit.
引言:當再次進入程式比較容易造成當機??? Really? I think you only create memory leakage if not freeing it.... P.S. There is a Capacity property in TStringList. |
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
就我所知
array是data type TStringList是object
所以理論上
1.array的效能會好一點,但是我想除非是上萬筆的迴圈或資料
否則其實你應該不太可能感覺出來兩則的差異
2.正因array是data type TStringList是object所以
TStringList所用的系統資源一定比較多,因為TStringList
有許多的Properties及Methods可供使用所以應該會多使用
到一些系統的資源
3.在delphi裡是說資料在系統結束之後會自己放啦,但是我覺
得,自己free來的安心多了,因為我覺得有時候delphi的資源
不見得可以都完整的釋放回來,久了會當是真的,但是,您所
說的access存取錯誤,我就沒遇過了,除非我沒有按正常的方
法使用TStringList,否則真的沒遇過這種情形耶,其實,除非
必要,不然我實在是很少用array來存string了...
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
引言: 就我所知 array是data type TStringList是object 所以理論上 1.array的效能會好一點,但是我想除非是上萬筆的迴圈或資料 否則其實你應該不太可能感覺出來兩則的差異 2.正因array是data type TStringList是object所以 TStringList所用的系統資源一定比較多,因為TStringList 有許多的Properties及Methods可供使用所以應該會多使用 到一些系統的資源 3.在delphi裡是說資料在系統結束之後會自己放啦,但是我覺 得,自己free來的安心多了,因為我覺得有時候delphi的資源 不見得可以都完整的釋放回來,久了會當是真的,但是,您所 說的access存取錯誤,我就沒遇過了,除非我沒有按正常的方 法使用TStringList,否則真的沒遇過這種情形耶,其實,除非 必要,不然我實在是很少用array來存string了...1.2.對 3.錯 當你使用物件時,凡是你 create 的,若不是用 *.create(Self); 這個語法的都必須由你來釋放,不然會永久賴在系統記憶體內,因為當 create 時若有指定owner,即 self ,則當 owner 被是釋放時,會一併釋放其擁有的物件,所以才不用擔心 free 的問題,所以不是 Delphi 釋放不全,而是你的疏失,至於單純型態的 array ,則由 Delphi 來幫你管理,所以不用處理釋放的問題,即使你用的是動態陣列,而你沒有使用 array = nil 來釋放,Delphi 也會幫你做,這些 Delphi Help 都有提到,看仔細一點吧! |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言: 3.錯 當你使用物件時,凡是你 create 的,若不是用 *.create(Self); 這個語法的都必須由你來釋放,不然會永久賴在系統記憶體內,因為當 create 時若有指定owner,即 self ,則當 owner 被是釋放時,會一併釋放其擁有的物件,所以才不用擔心 free 的問題,所以不是 Delphi 釋放不全,而是你的疏失,至於單純型態的 array ,則由 Delphi 來幫你管理,所以不用處理釋放的問題,即使你用的是動態陣列,而你沒有使用 array = nil 來釋放,Delphi 也會幫你做,這些 Delphi Help 都有提到,看仔細一點吧!I think only TComponent will do this |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
|
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |