首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

AAuto 系統編程:調用 PSAPI 獲取進程物理/虛擬內存使用量

     編輯:關於C語言

核心代碼

getMemorySize = function(exefile) {  // 支持正則匹配進程名
    import process;

    // 導入 PSAPI.GetProcessMemoryInfo
    GetProcessMemoryInfo = ::Psapi.api("GetProcessMemoryInfo", "int(pointer hProcess, struct& ppsmemCounters, int cb)");

    // 定義 PROCESS_MEMORY_COUNTERS 結構
    PROCESS_MEMORY_COUNTERS = class {
        int cb;
        int PageFaultCount;
        int PeakWorkingSetSize;   // 物理內存峰值
        int WorkingSetSize;       // 當前物理內存 (工作集大小)
        int QuotaPeakPagedPoolUsage;
        int QuotaPagedPoolUsage;
        int QuotaPeakNonPagedPoolUsage;
        int QuotaNonPagedPoolUsage;
        int PagefileUsage;        // 虛擬內存大小
        int PeakPagefileUsage;    // 虛擬內存峰值
    }

    mem = PROCESS_MEMORY_COUNTERS();

    for processEntry in process.each(exefile) {
        prc = process(processEntry.th32ProcessID);
        try {
            GetProcessMemoryInfo(prc.handle, mem, raw.sizeof(mem));
            io.print(processEntry.szExeFile + " 內存使用:", mem.WorkingSetSize / 1024 ++ " KB");
        }
    }
}

io.open();
getMemorySize(".*.exe");  // 列出所有進程內存佔用

關鍵字段解讀

字段含義典型用途
WorkingSetSize當前物理內存佔用 (工作集)實時監控內存佔用
PeakWorkingSetSize物理內存峰值分析內存尖峰
PagefileUsage當前虛擬內存佔用頁面文件壓力評估
PeakPagefileUsage虛擬內存峰值最大提交記憶體

技術細節

  • 使用 ::Psapi.api 動態導入系統 DLL 函數,無需靜態鏈接。
  • raw.sizeof(mem) 自動計算結構體大小,避免手工對齊錯誤。
  • process.each 內建快照遍歷,支持正則過濾進程名。
  • 異常捕獲 try 保證單個進程失敗不影響整體枚舉。

應用場景

  • 性能基線測試:記錄關鍵服務長期運行內存曲線
  • 內存洩漏定位:定期採樣對比 WorkingSetSize 增長趨勢
  • 自動化運維:超閾值觸發告警或自動重啟
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved