泛型tobjectdictionary怎樣釋放記憶體? |
答題得分者是:tick228
|
wangccw
一般會員 發表:21 回覆:39 積分:17 註冊:2005-01-30 發送簡訊給我 |
最近由 D6 轉到 D2010 ,之前d6 泛型及雜湊表 都是使用 jcl 的 TjclStrHashMap 及 TjclVector ,現在剛接觸 2010 ,看到它有泛型之後就來試試看了,可以的話就可以捨棄jcl的 TjclStrHashMap了。
但我發現它會有記憶體釋放的問題,附件是我的測試程式,一直按下 button1 ,記體會明顯的增加,可是我明明有呼叫 tobjectdictionary.clear,將放在 tobjectdictionary 內的物件清除掉了啊,為何記憶體還會持續增加?? 請各位大德指點一下我哪裡有寫錯,謝謝。 |
leveon
資深會員 發表:30 回覆:389 積分:303 註冊:2012-02-12 發送簡訊給我 |
Clear只是將容器清空 ,物件還在記憶體中
在容器清空前 手動Free即可 for I := 0 to date.Count-1 do begin date.Items[I].Free; end; 另外 推薦你可以使用Fastmm4 檢查記憶體有沒有洩漏 ===================引 用 wangccw 文 章=================== 最近由 D6 轉到 D2010 ,之前d6 泛型及雜湊表 都是使用 jcl 的 TjclStrHashMap 及 TjclVector ,現在剛接觸 2010 ,看到它有泛型之後就來試試看了,可以的話就可以捨棄jcl的 TjclStrHashMap了。 但我發現它會有記憶體釋放的問題,附件是我的測試程式,一直按下 button1 ,記體會明顯的增加,可是我明明有呼叫 tobjectdictionary.clear,將放在 tobjectdictionary 內的物件清除掉了啊,為何記憶體還會持續增加?? 請各位大德指點一下我哪裡有寫錯,謝謝。 |
wangccw
一般會員 發表:21 回覆:39 積分:17 註冊:2005-01-30 發送簡訊給我 |
|
tick228
高階會員 發表:1 回覆:47 積分:104 註冊:2003-11-03 發送簡訊給我 |
Hi,
TObjectDictionary 有另提供多種 constructor Create(), 你要的功能, 只要將 date := TObjectdictionary 這行改為下列方式 date := TObjectdictionary 即可達到,. 可參考 Help 裏的說明. ===================引 用 wangccw 文 章=================== jcl 的 TjclStrHashMap 可以設定是否要讓自已管理物件,亦即當 TjclStrHashMap.clear 之後,裡面存放的物件會自動 free 掉。 tobjectdictionary 還要手動清除物件,這樣實在不怎麼優。 另外 delphi 2010 是否還需要 Fastmm4 來加強管理記憶體 ? |
wangccw
一般會員 發表:21 回覆:39 積分:17 註冊:2005-01-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |