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

程式消耗的記憶體

答題得分者是:taishyang
rogerchao
一般會員


發表:28
回覆:12
積分:8
註冊:2005-07-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-24 14:47:00 IP:59.125.xxx.xxx 訂閱
想請問各位高手有沒有什麼函數可以知道特定的應用程式所消耗的記憶體呢? 謝謝
編輯記錄
rogerchao 重新編輯於 2007-05-24 14:47:52, 註解 無‧
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-24 15:28:03 IP:218.163.xxx.xxx 訂閱
你好:

沒實際做過......

Win32 API "GetProcessWorkingSetSize"....不知是不是你要的
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-24 16:43:16 IP:122.124.xxx.xxx 未訂閱
是指[工作管理員]中的[記憶體使用量]嗎?
如果是的話,小弟參考下面連結後,新增一小段程式可以得知記憶體使用量
http://www.cobbler.tw/message.aspx?topic_id=39622

<textarea class="cpp" rows="10" cols="60" name="code">void ListProcessNameAndID(DWORD processID); void ListProcessNameAndID(DWORD processID) { char szProcessName[MAX_PATH] = "unknown"; PROCESS_MEMORY_COUNTERS pmc; // Get a handle to the process. HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID); // Get the process name. if (NULL != hProcess) { HMODULE hMod; DWORD cbNeeded; if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) { GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName)); GetProcessMemoryInfo(hProcess, &pmc, sizeof(pmc)); } else { return; } } else { return; } //--------------------------------------------------------------------------- // Print the process name and identifier. Form1->Memo1->Lines->Add((AnsiString)szProcessName " Memory:" IntToStr(pmc.WorkingSetSize/1024) "K"); CloseHandle(hProcess); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { DWORD aProcesses[1024], cbNeeded; if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) { return; } // Calculate how many process identifiers were returned. for (int i=0; i < (int)(cbNeeded/sizeof(DWORD)) ;i ) { ListProcessNameAndID(aProcesses[i]); } } //--------------------------------------------------------------------------- </textarea>
關鍵是利用GetProcessMemoryInfo來得知但小弟不會轉成Delphi ><
編輯記錄
taishyang 重新編輯於 2007-05-24 16:44:24, 註解 無‧
fatmoon1
初階會員


發表:3
回覆:29
積分:36
註冊:2004-05-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-24 18:34:49 IP:61.63.xxx.xxx 訂閱
在Google搜尋GetProcessMemoryInfo找到
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1360311

參照網址 節錄如下
<textarea class="delphi" rows="10" cols="60" name="code">GetPMem(PID:DWORD); var pmc: PPROCESS_MEMORY_COUNTERS; cb: Integer; phandle:Thandle; begin phandle:=OpenProcess(PROCESS_ALL_ACCESS,false,PID); cb := sizeof(_PROCESS_MEMORY_COUNTERS); GetMem(pmc, cb); pmc^.cb := cb; if GetProcessMemoryInfo(phandle, pmc, cb) then ShowMessage(IntToStr(pmc^.WorkingSetSize)) else ShowMessage('錯誤'); end; </textarea>

------
才疏學淺
系統時間:2024-04-27 3:14:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!