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

Delphi6開發了一支NT Service的程式發現記憶體用量一直上升

尚未結案
samuelliang
一般會員


發表:2
回覆:5
積分:1
註冊:2005-02-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-03 14:36:41 IP:211.20.xxx.xxx 未訂閱
Hi,各位先進: 如題,在這支Service當中有利用ADO元件對資料庫進行Select跟Delete的動作, 當動作結束後都有將元件Free掉,但仍然發現記憶體用量還是呈現上升的趨勢。 可否請各位大人提示如何解決呢?謝謝! =====程式碼節錄如下===== procedure TSyncLDAPThread.ScanSyncIf; var adoEUserConn: TADOConnection; adoScanIFQry: TADOQuery; adoSelMstQry: TADOQuery; begin CoInitialize(nil); try adoEUserConn := TADOConnection.Create(nil); // Connect to Engdb database adoScanIFQry := TADOQuery.Create(nil); // Create scan interface adoQuery adoSelMstQry := TADOQuery.Create(nil); // Create select master table adoQuery // adoConnection 'adoEUserConn' property setting adoEUserConn.ConnectionString := connStr; adoEUserConn.LoginPrompt := false; try adoEUserConn.KeepConnection := true; // adoQuery 'adoScanIFQry' property setting adoScanIFQry.Prepared := false; adoScanIFQry.SQL.Text := scanSQL; adoScanIFQry.Connection := adoEUserConn; adoScanIFQry.Prepared := true; // adoQuery 'adoSelMstQry' property setting adoSelMstQry.Parameters.AddParameter.Name := 'V_BADGE_NO'; try adoScanIFQry.Active := true; while not adoScanIFQry.EOF do begin // empty related variables ..... adoScanIFQry.Next; end; adoScanIFQry.Active := false; except on e: Exception do begin if needLogging then SyncLogger.LogMessage(e.Message, EVENTLOG_INFORMATION_TYPE,0,0); end; end; except on e: Exception do begin if needLogging then SyncLogger.LogMessage(e.Message, EVENTLOG_INFORMATION_TYPE,0,0); end; end; finally try adoSelMstQry.Parameters.Free; adoSelMstQry.Free; adoScanIFQry.Free; adoEUserConn.Free; adoSelMstQry.Parameters.Destroy; adoSelMstQry.Destroy; adoScanIFQry.Destroy; adoEUserConn.Destroy; except end; end; CoUninitialize; end;
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-03 15:34:17 IP:218.167.xxx.xxx 未訂閱
建議利用SetProcessWorkingSetSize 找找本站文章 會有一些收穫 【Delphi】【問題】利用TIdTCPServer接受資料並存入資料庫中發生的問題http://delphi.ktop.com.tw/topic.php?topic_id=48665 【分享】Release Memory 釋放記憶體 http://delphi.ktop.com.tw/topic.php?topic_id=47449 如果進一步對於記憶體釋放有興趣 可以參考 【問題】實體記憶體變少了 http://delphi.ktop.com.tw/topic.php?topic_id=52293 @瞭解越多.懂得越少@
samuelliang
一般會員


發表:2
回覆:5
積分:1
註冊:2005-02-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-04 10:26:43 IP:211.20.xxx.xxx 未訂閱
引言: 建議利用SetProcessWorkingSetSize 找找本站文章 會有一些收穫 【Delphi】【問題】利用TIdTCPServer接受資料並存入資料庫中發生的問題http://delphi.ktop.com.tw/topic.php?topic_id=48665 【分享】Release Memory 釋放記憶體 http://delphi.ktop.com.tw/topic.php?topic_id=47449 如果進一步對於記憶體釋放有興趣 可以參考 【問題】實體記憶體變少了 http://delphi.ktop.com.tw/topic.php?topic_id=52293 @瞭解越多.懂得越少@
Hi,chris_shieh: 謝謝你的指引喔! 初步看來此問題應該已經解決了,解決方式如下: 1. 我的同事建議的方式: Object.Free; Object := nil; 這樣做便已經有效地將記憶體釋放,整個應用程式的記憶體使用量不在大幅度成長,而是小幅成長後便呈現穩定了! 2. 再配合Windows這個unit中的指令: SetProcessWorkingSetSize(GetCurrentProcess,$FFFFFF,$FFFFFF); 來限制住整個應用程式所能使用的記憶體範圍,來預防萬一程式仍然有微量的記憶體成長的現象,必面耗盡記憶體資源。 以上便是我的做法,再次感謝你的引導! 發表人 - samuelliang 於 2005/03/04 10:41:44
系統時間:2024-06-01 22:50:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!