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

Windows 平台用 C 語言獲取進程 CPU、記憶體與 I/O 統計

     編輯:關於C語言

介面設計

// 回傳 CPU 使用率百分比,失敗回傳 -1
int get_cpu_usage();

// 回傳實體記憶體與虛擬記憶體位元組數,成功 0,失敗 -1
int get_memory_usage(uint64_t* mem, uint64_t* vmem);

// 回傳累積讀寫位元組數,成功 0,失敗 -1
int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes);

核心實現細節

CPU 使用率

  • 呼叫 GetProcessTimes() 取得核心/使用者模式 CPU 時間(100ns 為單位)。
  • 呼叫 GetSystemTimeAsFileTime() 取得系統時間基準。
  • 兩次採樣相減計算增量:cpu% = (process_time_delta * 100) / (system_time_delta * processor_count)。
  • 首次呼叫僅記錄基準值,回傳 -1。
  • 需連結 psapi.lib。

記憶體使用

  • GetProcessMemoryInfo() 填充 PROCESS_MEMORY_COUNTERS。
  • WorkingSetSize = 實體記憶體工作集;PagefileUsage = 虛擬記憶體(頁面檔)使用量。

I/O 統計

  • GetProcessIoCounters() 填充 IO_COUNTERS。
  • ReadTransferCount / WriteTransferCount 為累積位元組數(含非檔案 I/O)。

完整測試程式

int main()
{
    while (1)
    {
        int cpu = get_cpu_usage();
        uint64_t mem, vmem, r, w;
        get_memory_usage(&mem, &vmem);
        get_io_bytes(&r, &w);
        printf("CPU: %u%%  Mem: %llu B  VMem: %llu B  Read: %llu B  Write: %llu B\n",
               cpu, mem, vmem, r, w);
        Sleep(1000);
    }
    return 0;
}

注意事項

  • 僅適用 Windows(需 windows.h, psapi.h)。
  • CPU 計算已除以邏輯處理器數,回傳值為單核心等效使用率。
  • 首次呼叫 get_cpu_usage() 回傳 -1,需連續輪詢才有意義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved