Delphi6開發了一支NT Service的程式發現記憶體用量一直上升 |
尚未結案
|
samuelliang
一般會員 發表:2 回覆:5 積分:1 註冊:2005-02-21 發送簡訊給我 |
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 發送簡訊給我 |
建議利用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 發送簡訊給我 |
引言: 建議利用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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |