.NET(C#):擷取進程的CPU使用狀況

來源:互聯網
上載者:User

第一個是通過手動的方法來計算CPU使用比例: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");

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.