全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2392
推到 Plurk!
推到 Facebook!

如何釋放bcb本身佔用的記憶體?

答題得分者是:salo0610
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-08-17 15:30:42 IP:211.21.xxx.xxx 訂閱
當我在 bcb 裏執行程式時,所以那個 bcb.exe 所佔用的記憶體會一直加大,實體跟虛擬都會。

程式小時沒問題,但我有支程式是去讀取 excel 經過處理寫到另外一個 excel 去
然後就會看到那個 bcb.exe 實體跟虛擬一直以 3xxKB 迅速的望上增長,最後很容易出現 Out of memory
不知有什麼辦法可以在除錯下避免這類的問題?

------
無所不在
編輯記錄
jtain 重新編輯於 2011-08-17 01:32:14, 註解 無‧
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-08-18 08:49:35 IP:60.250.xxx.xxx 未訂閱
先單純開新專案隨意寫個簡單的流程 run 一陣子看有沒有一樣的問題,不要用第三方元件。
先排除 bcb 本身的問題。

之後
朝你自己寫的 code 的部份檢討有沒有 memory leak 的問題。


建議:寫程式,只要遇到問題,先從自身開始找起。


jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-08-19 16:00:20 IP:211.21.xxx.xxx 訂閱
應該沒有 memory leak 的現象,因為我只有一個地方有用到 new
我用完就立刻 delete, 而且就算是有,也應該不會有太大的問題,
因為都只用小小的空間,而每次工作管理員一次更新就是接近 400KB 的實體記憶體在膨脹...

所以我目前碰到這類的現象就只能產生 .exe 直接執行...
------
無所不在
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-08-19 18:01:37 IP:59.120.xxx.xxx 未訂閱
可以先從「換電腦、換安裝光碟」試試

不行?

那就當是bcb6的bug吧
都這麼久了…

有這種症頭真的很難醫

===================引 用 jtain 文 章===================
應該沒有 memory leak 的現象,因為我只有一個地方有用到 new
我用完就立刻 delete, 而且就算是有,也應該不會有太大的問題,
因為都只用小小的空間,而每次工作管理員一次更新就是接近 400KB 的實體記憶體在膨脹...

所以我目前碰到這類的現象就只能產生 .exe 直接執行...
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-08-19 18:36:20 IP:211.21.xxx.xxx 訂閱
我公司是正式的專業版....

codeguard 檢查的結果只有底下幾個小區段,佔用不了多少

The object array (0x00DC19D8) [size: 248 bytes] was created with new[]
The object array (0x00DD79F0) [size: 152 bytes] was created with new[]
The object array (0x00DBDD8C) [size: 200 bytes] was created with new[]
The object array (0x00DC56F4) [size: 140 bytes] was created with new[]
The object array (0x00DB6BCC) [size: 224 bytes] was created with new[]

就只查到這麼多...
------
無所不在
salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-08-22 09:00:14 IP:60.249.xxx.xxx 未訂閱
參考這幾篇呢, 有效嗎??


===================引 用 jtain 文 章===================
當我在 bcb 裏執行程式時,所以那個 bcb.exe 所佔用的記憶體會一直加大,實體跟虛擬都會。

程式小時沒問題,但我有支程式是去讀取 excel 經過處理寫到另外一個 excel 去
然後就會看到那個 bcb.exe 實體跟虛擬一直以 3xxKB 迅速的望上增長,最後很容易出現 Out of memory
不知有什麼辦法可以在除錯下避免這類的問題?

jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-08-22 11:52:43 IP:211.21.xxx.xxx 訂閱
我把 codeguard 找到的 2段例外程式處理掉後,codeguard  就沒有訊息了,只有一堆呼叫次數的紀錄了。

> Release Memory 釋放記憶體
這一篇有效,我直接在最外層的迴圈內加上

if( Win32Platform == VER_PLATFORM_WIN32_NT){
SetProcessWorkingSetSize(GetCurrentProcess, 0xFFFFFFFF, 0xFFFFFFFF) ;
Sleep(100) ;
}

bcb.exe 每次佔用的記憶體變成不到 200KB...

謝謝 salo0610 大大

另外等於也證實在 BCB 的 IDE 模式下執行程式時,當使用 new & delete 時,只是註記釋放而已,並沒有真的直接把相關的實體記憶體給立即釋放掉。

------
無所不在
編輯記錄
jtain 重新編輯於 2011-08-21 23:26:50, 註解 無‧
jtain 重新編輯於 2011-08-22 00:51:11, 註解 無‧
系統時間:2017-10-24 13:42:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!