線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1651
推到 Plurk!
推到 Facebook!

Loop讓記憶體不足的困擾

答題得分者是:jest0024
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-01 10:13:39 IP:61.218.xxx.xxx 未訂閱
大部分的時候,程式都會用到迴圈。有幾支用得比較多, 當大量跑迴圈時,不僅速度很慢,而且記憶體甚至會不足,導致程式無法繼續下去。目前只能盡量減少跑迴圈的次數,請問有沒有方法,在程式中適度的釋放記憶體呢?
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-01 11:56:50 IP:203.67.xxx.xxx 未訂閱
引言: 大部分的時候,程式都會用到迴圈。有幾支用得比較多, 當大量跑迴圈時,不僅速度很慢,而且記憶體甚至會不足,導致程式無法繼續下去。目前只能盡量減少跑迴圈的次數,請問有沒有方法,在程式中適度的釋放記憶體呢?
迴圈應該不會造成大量使用記憶體吧?造成大量使用記憶體是迴圈裡的程式碼?迴圈也不是遞回會堆疊記憶體!!! 釋放記憶体Free,FreeMem,Dispose 想買台TPC..TTAB-B12D
nnn0918k
一般會員


發表:12
回覆:33
積分:14
註冊:2003-05-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-01 19:53:44 IP:61.216.xxx.xxx 未訂閱
迴圈本身不會「一直」吃記憶體跟堆疊 如果會記憶體不足or堆疊溢位 那代表說你在迴圈中 有 Create 物件(ex: Stream..) 或是 GetMem(ex: StrAlloc,AllocMem..etc) 之類的動作 解決方法.. 在迴圈中順便釋放 Create的話就Free掉 StrAlloc就用StrDispose GetMem,AllocMem用FreeMem 火舞精靈 - 蘇
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-03 09:01:40 IP:61.218.xxx.xxx 未訂閱
最近碰到的是在某段中不停用FindFist FindNext FindClose 其他產生instance的動作則沒有。 不知道上面提到的三個function有沒有吃記憶體的? 但findclose不是也應該會能釋放記憶體嘛? 還是我應該每跑一圈就把TSearchRec釋放,然後重新建立一個
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-04 14:49:00 IP:211.74.xxx.xxx 未訂閱
引言: 最近碰到的是在某段中不停用FindFist FindNext FindClose 其他產生instance的動作則沒有。 不知道上面提到的三個function有沒有吃記憶體的? 但findclose不是也應該會能釋放記憶體嘛? 還是我應該每跑一圈就把TSearchRec釋放,然後重新建立一個
使用工作管理員並沒所謂的吃記憶體現像!?
procedure Test
var
  sr: TSearchRec;
  FileAttrs: Integer;
  i:Integer;
begin
  for i:=0 to 1000 do begin
    FileAttrs:=faAnyFile;
    if FindFirst('D:\*.*', FileAttrs, sr) = 0 then
    begin
      repeat
//        ListBox1.Items.Add(sr.Name) //<--這行加了就會使用掉記憶體了!!
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
  end;
end;
學而時習之不亦樂乎!
系統時間:2024-05-15 10:27:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!