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

請問如何釋放被Delphi 咬死之Windows 記憶體?

尚未結案
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-03 00:27:17 IP:211.20.xxx.xxx 未訂閱
當以Dephi 實作一每隔一分鐘就去Query MS SQL的程式, 為何數小時後, 該機器之記憶體即被咬死(即使將該程式關掉,從工作管理員之處理程序中仍可見該程式在執行)? 有何方法可在程式中定時將記憶體資源釋放嗎(VB中好像有Do event可用, 不知Delphi 也有類似的方法嗎?)
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-03 00:44:37 IP:218.16.xxx.xxx 未訂閱
參考 : http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19726 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19882
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-03 01:56:43 IP:211.20.xxx.xxx 未訂閱
謝謝你! 不過, 此法是否亦可解決 "該程式會咬住記憶體不放之情形"??
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-03 08:01:15 IP:218.16.xxx.xxx 未訂閱
那要看被那些記憶體到底是因為甚麼原因被咬住,若是 cache 沒好好被系統釋方的話應可以,若錯是程式設計失誤一直增加資源耗用而沒釋放沒用的資源的話不一定可以,這種問題應是要改善程正確釋放資源來解決。
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-03 13:34:52 IP:218.1.xxx.xxx 未訂閱
我想你说的是CPU总是100%吧,与VB的DoEvent对应,delphi有 Application.ProcessMessages; 还可以加点延时 Sleep(2);
------
江上何人初见月,江月何年初照人
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-03 18:49:46 IP:211.20.xxx.xxx 未訂閱
謝謝你! 加此式後, 情況稍好些, 但是, 該支程式每次query一次資料庫(一分鐘一次), 記憶體仍會慢慢累加(只是不再膨脹如此快速); 隔天一定要將此程式關掉再開, 否則該機器performance 就降的很厲害. 請問還有其他方式能在不關掉程式情況下release 其佔用之記憶體嗎?
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-03 19:10:39 IP:211.20.xxx.xxx 未訂閱
謝謝大大, 一針見血點出問題所在, 只是想請教文中 - '程式設計失誤一直增加資源耗用而沒釋放沒用的資源的話 要改善程式正確釋放資源來解決', 不知應如何寫才能正確釋放資源呢?? (此程式中確實未有release 記憶體之方法; 然而依建議加入Application.ProcessMessages 後, 情況雖稍有改善, 但該程式之記憶體耗用量仍會緩慢遞增.)
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-03 22:13:48 IP:218.16.xxx.xxx 未訂閱
沒看過你的程式甚會知道你那裡出漏洞一宜消耗記憶禮呢? 其本上你看看你有沒有 create 任何東西而沒有 Free 或有沒 GetMem / New 變數 而沒 FreeMem / Dispose 可找到一些沒 Free 的部份
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-04 01:32:49 IP:211.20.xxx.xxx 未訂閱
程式很單純, 只是一直用一個ADOQuery及Animate 物件,每一分鐘對MS SQL select 所需要的dataset(之間當然會需頻繁的close,clear,add,open or exec 此sql物件), 然後再針對此dataset之每一筆,一一作某些判斷(其中有用到一維陣列及另個ADOQuery物件),若符合條件再對其中某些欄位值作 update 或 insert 一筆新記錄到另Table. 所以,應無刻意有GetMem 的動作或下create 任何東西之指令,而變數是程式一開始就已宣告過,並無新宣告的,再來就只有Array每次會隨捉到之筆數多寡而有大小不同而已. 該程式總體言是可以Run的很好, 只是每次記憶體就會愈咬愈多很傷腦筋. 所以不知大大所謂FreeMem / Dispose 是否適合此種場合用及語法應如何下呢? 謝謝
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-04 08:28:14 IP:218.16.xxx.xxx 未訂閱
Create / GetMem 那些只是最常見的問題,還有很多可能,如Prepare Query 等,不可能這樣一個一個的玩猜迷遊戲罷? 若你不能貼上你的程式碼或上傳到會員求助區,那你只好自己慢慢找了。
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-05 17:29:39 IP:211.20.xxx.xxx 未訂閱
Well, 因程式碼還蠻長的, 怕不夠放! 另亦考量會不會涉及商業資料外洩問題? 請問有無兩全其美辦法呀? TKS!
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-05 18:49:38 IP:61.221.xxx.xxx 未訂閱
Well, 因程式碼還蠻長的, 怕不夠放! 另亦考量會不會涉及商業資料外洩問題? 請問有無兩全其美辦法呀? TKS! 1 太常請使用 上傳 求救區 2 商業化考量 那也不太應該來版區問 因為沒人寫過也無法答 你可以自己改 不商業的範例 即可 KTOP也好像有滿多 與商業衝擊的問答把 我只是 說觀念問題無惡意 但是如果 大家都抱住 閉門造車的模式 那又何來詢問之意 任何一個問答 我都覺得 與商業有關 只是大家自己的認定 如果你認定會外洩 那也希望你 別將自認的商業化 請自己鑽研 這樣的相對要求 在於自己 而非別人 我想 適時的反應 對大家都才能有正確的觀念 強調 這不是對人而是對事 如果你覺得有侵犯 我先道歉 說對不起 也許說太火了 但是我還是要把這樣的觀念 說出來 這就如 我的簽名 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起 此簽名是KTOP的網站 的網站解釋 我不是要你一定 po 上 不過你的回應也讓 答題者 失望了 簡單的幾行字 也許已經讓別人 想破頭 你的問題 也只有幾行字 換成你是答題人 你知道問的人 真正問題嗎? 我想大家都不能說 都知道 都了解 所以請你自己 問答之間 別問到最後 問題還是你 這樣的問題 別問比較好 因為只有你知道 別人不知道 那分享 不是 說假的 請將心比心 立場互換 亦有不少網友 直接寄e mail給答題者 這樣的方式 如果發問者 有po上解題就好 如果 私下解題 KTOP也無法管 只是KTOP的 答題者 在享受問答快樂之時 也應該要了解 分享的問答 應該是公開 還是私下才是 正確的觀念 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-05 21:05:48 IP:211.20.xxx.xxx 未訂閱
大大教訓的是, 怎奈吃人頭路, 侵犯智財權是很嚴重的(畢竟非原創者), 所以才稍有顧忌. 倒是大大提醒或可將它改寫成簡化版應是不錯建議. 待我研究看看. 無論如何, 仍滿心感激所有如大大般熱心提攜新進的前輩. 在此先謝過了! TKS
andy_lin18
一般會員


發表:1
回覆:11
積分:2
註冊:2003-06-03

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-10 01:39:11 IP:211.20.xxx.xxx 未訂閱
Well, 經近幾日之Trace, 才發覺Justmade大大之前所介紹的方式是有效的歐. 當時只顧注意RAM的遞增, 卻忘了RAM釋放值只設到64M (該機有1G), 那當然看起來是無效的囉. 太煩勞各位先進了, 亦請原諒不才的疏失.< >< >
系統時間:2024-11-23 9:35:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!