C#獲取進程的CPU使用率


參考文章:http://www.cnblogs.com/gjhjoy/p/3551549.html

 

一、根據Process類方法進行計算

    CPU使用比例 = 在間隔時間內進程的CPU使用時間 除以 計算機邏輯CPU數量

    使用Process類的UserProcessorTime和PrivilegedProcessorTime屬性可以返回當前進程所耗費CPU的用戶和內核時間。Process.TotalProcessorTime則代表兩者之和。它們都返回TimeSpan結構體對象。

     代碼:

//using System.Diagnostics

//using System.Threading

static void UsingProcess(string pname)

{

    using (var pro = Process.GetProcessesByName(pname)[0])

    {

        //間隔時間(毫秒)

        int interval = 1000;

        //上次記錄的CPU時間

        var prevCpuTime = TimeSpan.Zero;

        while (true)

        {

            //當前時間

            var curTime = pro.TotalProcessorTime;

            //間隔時間內的CPU運行時間除以邏輯CPU數量

            var value = (curTime - prevCpuTime).TotalMilliseconds / interval /Environment.ProcessorCount * 100;

            prevCpuTime = curTime;

            //輸出

            Console.WriteLine(value);

 

            Thread.Sleep(interval);

        }

    }

}

 

注意:

經測試上述方法同下面方法一樣結果都比較准確,而且上面的方法更快(考慮到下面性能計數器的使用,尤其是多個重復進程名稱在性能計數器中的處理),而上面方法可以直接用進程ID(PID)查詢,因為用的是Process類,這是性能計數器不能快速做到的。

但是,上面的方法僅有一個缺點,當監控某些系統進程時可能會拋出Win32Exception異常指示“訪問被拒絕”(即便是你已經使用管理員賬戶來運行程序)。

 

二、性能計數器(PerformanceCounter)

    這個有現成的性能計數器專門做這個工作,可以直接參考控制面板中性能監控里的Process類的% Processor Time性能計數器。

唯一需要注意的地方是:改性能計數器的返回值沒有考慮到多核(多個)CPU的情況,所以計算結果應該除以CPU數量!

 

代碼:

static void UsingPerfmon(string pname)

{

    //創建性能計數器

    using (var p1 = new PerformanceCounter("Process", "% Processor Time", pname))

    {

        while (true)

        {

            //注意除以CPU數量

            Console.WriteLine(p1.NextValue() / Environment.ProcessorCount);

            Thread.Sleep(1000);

        }

    }

}

 

直接調用方法(需要指定一個進程名稱)就可以每個一段時間輸出改進程的CPU使用百分比:

比如看看Windows任務管理器的CPU使用率:

//或者UsingPerfmon("taskmgr");

UsingProcess("taskmgr");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM