程式範例-使用 C# 查詢 CPU 與記憶體使用狀況

有個小需求想透過程式取得 CPU 與記憶體使用率,爬文發現用 C# 寫簡單到不行:建一個 PerformanceCounter 物件,指定分類、計數器名稱、執行個體,接著用 NextValue() 取值,輕鬆搞定。

using System;
using System.Diagnostics;
using System.Threading;
 
namespace JetEngine
{
    class Program
    {
        static PerformanceCounter cpu = new PerformanceCounter(
            "Processor", "% Processor Time", "_Total");
        static PerformanceCounter memory = new PerformanceCounter(
            "Memory", "% Committed Bytes in Use");
 
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("CPU: {0:n1}%", cpu.NextValue());
                Console.WriteLine("Memory: {0:n0}%", memory.NextValue());
                Thread.Sleep(1000);
            }
        }
    }
}

如果不知道分類、計數器及執行個體名稱,可以參考效能監視器的新増計數器介面:

實測驗證,程式與效能監視器抓到的數據一致。

使用 PerformanceCounter 類別需要讀取特定 Registry 的權限,一般登入帳號都可使用,但如果想搬進ASP.NET會卡在權限問題,得到以下錯誤:Access to the registry key 'Global' is denied.

解決方案有二,第一是讓 ASP.NET 用一般使用者等級的身分執行,但會衍生網站程式權限變大的風險,較不建議。第二種做法是以一般使用者或系統帳號另跑獨立 Process 或 Windows Service 讀取計數器再以 WebAPI 方式供本機查詢,實作可考慮使用前幾天介紹的輕巧兵器-NancyFx

歡迎推文分享:
Published 21 October 2016 11:06 PM 由 Jeffrey
Filed under:
Views: 9,073



意見

# 安德魯 said on 21 October, 2016 01:12 PM

如果是在 windows 下,直接用 IISExpress 也可以閃過這個問題 XD

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<October 2016>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication