如何把不使用的元件完全free,且不佔記憶體?? |
答題得分者是:darnell
|
jackiemi2_seed
中階會員 ![]() ![]() ![]() 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
如附加檔案,
把資料從資料庫捉到grid習慣用這樣的寫法, 突然發現重複查詢時,記憶體越吃越多... 是adoqry沒有完全放掉嗎??? 是寫法不好的問題嗎?? thanks
------
OS : Win 7 pro Program : Delphi 7 DataBase : Ms Sql 2008 編輯記錄
jackiemi2_seed 重新編輯於 2008-12-10 22:11:45, 註解 無‧
|
shunaaron
高階會員 ![]() ![]() ![]() ![]() 發表:13 回覆:94 積分:106 註冊:2006-10-06 發送簡訊給我 |
|
jackiemi2_seed
中階會員 ![]() ![]() ![]() 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
|
darnell
版主 ![]() ![]() ![]() ![]() 發表:25 回覆:103 積分:145 註冊:2003-03-04 發送簡訊給我 |
的確用這樣的方法似乎第二次載入的資料是另外配置記憶體空間的,
因此並沒有立即釋放掉 我將程式碼改成如下,就不會有記憶體無法釋放的問題了,參考看看~ 有兩點要注意 1.要use Provider 2.原來你的範例中Field的型態StringField會跟資料庫的不同WideStringField 因此記的要重新讓ClientDataSet抓一次 [code delphi] procedure TForm1.Button1Click(Sender: TObject); var adoqry:tadoquery; i:integer; dsp:TDataSetProvider; begin try adoqry:=tadoquery.Create(self); adoqry.Connection:= ADOConnection1; adoqry.Close; adoqry.SQL.Clear; adoqry.SQL.Add('select item_no,item_name,item_1,item_2,item_3,item_4,' 'item_5,item_6,item_7,item_8 from bas_item_master'); adoqry.Open; dsp:=TDataSetProvider.Create(Self); dsp.DataSet:=adoqry; edit1.Text:=''; cd1.Data:=dsp.Data; edit1.Text:='結束'; application.ProcessMessages; finally FreeAndNil(adoqry); FreeAndNil(dsp); end; end; [/code] |
jackiemi2_seed
中階會員 ![]() ![]() ![]() 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |