NonSoft

プロセス毎のCPU使用率を表示するサンプル(C#.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
プロセス毎のCPU使用率を取得(表示)するサンプル(C#.NET)です。タスクマネージャーのような
カッコイイものでは無く、Debug.WriteLineでプロセス名(タスク名)とCPU使用率を表示します。
CPU使用率と言ってもIdleプロセスのCPU使用率はCPUアイドル(空き=未使用)率です。

ポイントとなるキーワードは以下の通りです。
(1)PerformanceCounter.CategoryName
(2)PerformanceCounter.CounterName
(3)PerformanceCounter.InstanceName
(4)PerformanceCounter.NextValue

サンプルとしてタスクマネージャーのCPU使用率を表示していますので、予め起動しておいてください。

CPU使用率を表示する他のサンプルと関連サンプルがありますので紹介します。
プロセス毎のCPU使用率を表示するサンプル(VB.NET)
プロセス一覧と子プロセスの起動/終了のサンプル(VB6)
CPUの使用率を表示するサンプル(VB6)

CPU使用率を表示する関連ツールがありますので紹介します。
プロセスLOG出力&表示ツールはプロセス毎のCPU使用率を定期的に記録するツールです。
パフォーマンス表示SCRはプロセス毎のCPU使用率を表示するスクリーンセーバーです。
超ミニCPUメーターは最小限の機能、最小限のサイズでCPU使用率を表示します。

★フォームモジュール(Form1.cs)
public partial class Form1 : Form
{
    /// <summary>
    /// パフォーマンスカウンタを配列で定義(CPU使用率取得用)
    /// </summary>
    /// <remarks></remarks>
    private System.Diagnostics.PerformanceCounter[] PerCnts =
        new System.Diagnostics.PerformanceCounter[3];

    /// <summary>
    /// フォームロード
    /// </summary>
    /// <param name="sender">sender</param>
    /// <param name="e">e</param>
    /// <remarks>フォームロード時にパフォーマンスカウンタを初期設定する</remarks>
    private void Form1_Load(object sender, EventArgs e)
    {
        // IdleプロセスのCPU使用率
        PerCnts[0] = new System.Diagnostics.PerformanceCounter();
        PerCnts[0].CategoryName = "Process";
        PerCnts[0].CounterName = "% Processor Time";
        PerCnts[0].InstanceName = "idle";
        PerCnts[0].NextValue();

        // taskmgrプロセスのCPU使用率
        PerCnts[1] = new System.Diagnostics.PerformanceCounter();
        PerCnts[1].CategoryName = "Process";
        PerCnts[1].CounterName = "% Processor Time";
        PerCnts[1].InstanceName = "taskmgr";
        PerCnts[1].NextValue();

        // devenvプロセスのCPU使用率
        PerCnts[2] = new System.Diagnostics.PerformanceCounter();
        PerCnts[2].CategoryName = "Process";
        PerCnts[2].CounterName = "% Processor Time";
        PerCnts[2].InstanceName = "devenv";
        PerCnts[2].NextValue();
    }

    /// <summary>
    /// プロセス毎のCPU使用率を表示するタイマー
    /// </summary>
    /// <param name="sender">sender</param>
    /// <param name="e">e</param>
    /// <remarks>各プロセスのCPU使用率を表示する</remarks>
    private void timer1_Tick(object sender, EventArgs e)
    {
        // 各プロセス毎にCPU使用率を取得するループ
        for (int i = 0; i <= PerCnts.Length - 1; i++)
        {
            // 各プロセスのCPU使用率を表示
            System.Diagnostics.Debug.WriteLine(
                PerCnts[i].InstanceName + "," + PerCnts[i].NextValue());
        }
    }
}