[C#] PerformanceCounterでCPU使用率を取得する方法
C#でPerformanceCounter
を使用してCPU使用率を取得するには、まずSystem.Diagnostics
名前空間をインポートします。
次に、PerformanceCounterクラス
のインスタンスを作成し、カテゴリ名を”Processor”、カウンタ名を”% Processor Time”、インスタンス名を”_Total”に設定します。
これにより、全プロセッサの平均使用率を取得できます。
NextValueメソッド
を呼び出すことで、現在のCPU使用率を取得できますが、正確な値を得るためには、少し待ってから再度NextValue
を呼び出す必要があります。
これにより、CPU使用率の変化をリアルタイムで監視できます。
CPU使用率の取得方法
コンソールからの場合は、dotnet add package System.Diagnostics.PerformanceCounter
でインストールできます。
必要な名前空間のインポート
C#でCPU使用率を取得するためには、System.Diagnostics
名前空間をインポートする必要があります。
この名前空間には、PerformanceCounterクラス
が含まれています。
using System.Diagnostics; // PerformanceCounterクラスを使用するため
PerformanceCounterのインスタンス作成
PerformanceCounterクラス
のインスタンスを作成することで、CPU使用率を取得する準備が整います。
以下のようにインスタンスを作成します。
PerformanceCounter cpuCounter = new PerformanceCounter();
カウンタの設定
PerformanceCounter
を使用するには、いくつかの設定が必要です。
具体的には、カテゴリ名、カウンタ名、インスタンス名を設定します。
カテゴリ名の設定
CPU使用率を取得するためのカテゴリ名は"Processor"
です。
このカテゴリには、CPUに関するさまざまなカウンタが含まれています。
cpuCounter.CategoryName = "Processor"; // カテゴリ名を設定
カウンタ名の設定
CPU使用率を取得するためのカウンタ名は"% Processor Time"
です。
このカウンタは、CPUの使用率をパーセンテージで示します。
cpuCounter.CounterName = "% Processor Time"; // カウンタ名を設定
インスタンス名の設定
インスタンス名は、特定のCPUコアを指定するために使用します。
全体のCPU使用率を取得する場合は、"_Total"
を指定します。
cpuCounter.InstanceName = "_Total"; // インスタンス名を設定
CPU使用率の取得
設定が完了したら、実際にCPU使用率を取得します。
NextValueメソッドの使用
NextValueメソッド
を使用して、CPU使用率の値を取得します。
このメソッドは、呼び出すたびに最新の値を返します。
float cpuUsage = cpuCounter.NextValue(); // CPU使用率を取得
正確な値を得るための注意点
NextValueメソッド
を初めて呼び出した際には、正確な値が得られないことがあります。
最初の呼び出しの後に、少し待ってから再度呼び出すことで、正確な値を取得できます。
System.Threading.Thread.Sleep(1000); // 1秒待機
float cpuUsage = cpuCounter.NextValue(); // 再度CPU使用率を取得
このようにして、C#を使用してCPU使用率を取得することができます。
実装例
シンプルなコンソールアプリケーション
以下は、シンプルなコンソールアプリケーションでCPU使用率を取得する例です。
このプログラムは、1秒ごとにCPU使用率を表示します。
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main()
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor"; // カテゴリ名を設定
cpuCounter.CounterName = "% Processor Time"; // カウンタ名を設定
cpuCounter.InstanceName = "_Total"; // インスタンス名を設定
while (true)
{
// 1秒待機
Thread.Sleep(1000);
// CPU使用率を取得
float cpuUsage = cpuCounter.NextValue();
// 結果を表示
Console.WriteLine($"CPU使用率: {cpuUsage}%");
}
}
}
CPU使用率: 5.0%
CPU使用率: 10.0%
CPU使用率: 15.0%
...
Windowsフォームアプリケーションでの使用
WindowsフォームアプリケーションでCPU使用率を表示するための例です。
このプログラムは、ラベルにCPU使用率を表示します。
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Timers;
public class CpuUsageForm : Form
{
private Label cpuUsageLabel;
private PerformanceCounter cpuCounter;
private System.Timers.Timer timer;
public CpuUsageForm()
{
// ラベルの初期化
cpuUsageLabel = new Label();
cpuUsageLabel.Font = new System.Drawing.Font("Arial", 24);
cpuUsageLabel.Dock = DockStyle.Fill;
cpuUsageLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
Controls.Add(cpuUsageLabel);
// PerformanceCounterのインスタンスを作成
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor"; // カテゴリ名を設定
cpuCounter.CounterName = "% Processor Time"; // カウンタ名を設定
cpuCounter.InstanceName = "_Total"; // インスタンス名を設定
// タイマーの設定
timer = new System.Timers.Timer(1000); // 1秒ごとに更新
timer.Elapsed += UpdateCpuUsage;
timer.Start();
}
private void UpdateCpuUsage(object sender, ElapsedEventArgs e)
{
// CPU使用率を取得
float cpuUsage = cpuCounter.NextValue();
// UIスレッドでラベルを更新
Invoke(new Action(() => cpuUsageLabel.Text = $"CPU使用率: {cpuUsage}%"));
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new CpuUsageForm());
}
}
リアルタイムモニタリングの実装
リアルタイムでCPU使用率をモニタリングし、一定の閾値を超えた場合にアラートを表示するプログラムの例です。
using System;
using System.Diagnostics;
using System.Threading;
class RealTimeCpuMonitor
{
static void Main()
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor"; // カテゴリ名を設定
cpuCounter.CounterName = "% Processor Time"; // カウンタ名を設定
cpuCounter.InstanceName = "_Total"; // インスタンス名を設定
while (true)
{
// 1秒待機
Thread.Sleep(1000);
// CPU使用率を取得
float cpuUsage = cpuCounter.NextValue();
// CPU使用率が80%を超えた場合にアラートを表示
if (cpuUsage > 80)
{
Console.WriteLine("警告: CPU使用率が高いです!使用率: " + cpuUsage + "%");
}
else
{
Console.WriteLine($"CPU使用率: {cpuUsage}%");
}
}
}
}
CPU使用率: 75.0%
CPU使用率: 82.0%
警告: CPU使用率が高いです!使用率: 82.0%
CPU使用率: 70.0%
...
これらの実装例を参考にして、C#でCPU使用率を取得し、さまざまなアプリケーションに応用することができます。
応用例
複数のカウンタを使用したシステムモニタリング
複数のカウンタを使用して、CPU使用率だけでなく、メモリ使用率やディスク使用率なども同時にモニタリングすることができます。
以下は、CPUとメモリの使用率を取得する例です。
using System;
using System.Diagnostics;
using System.Threading;
class SystemMonitor
{
static void Main()
{
// CPU PerformanceCounterのインスタンスを作成
PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
// メモリ PerformanceCounterのインスタンスを作成
PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
while (true)
{
// 1秒待機
Thread.Sleep(1000);
// CPU使用率を取得
float cpuUsage = cpuCounter.NextValue();
// 利用可能なメモリを取得
float availableMemory = ramCounter.NextValue();
// 結果を表示
Console.WriteLine($"CPU使用率: {cpuUsage}%, 利用可能メモリ: {availableMemory}MB");
}
}
}
CPU使用率: 10.0%, 利用可能メモリ: 2048MB
CPU使用率: 15.0%, 利用可能メモリ: 2000MB
...
ログファイルへのCPU使用率の記録
CPU使用率を定期的に取得し、ログファイルに記録するプログラムの例です。
これにより、後で分析するためのデータを蓄積できます。
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
class CpuUsageLogger
{
static void Main()
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
// ログファイルのパス
string logFilePath = "cpu_usage_log.txt";
while (true)
{
// 1秒待機
Thread.Sleep(1000);
// CPU使用率を取得
float cpuUsage = cpuCounter.NextValue();
// ログファイルに記録
File.AppendAllText(logFilePath, $"{DateTime.Now}: CPU使用率: {cpuUsage}%\n");
}
}
}
このプログラムを実行すると、cpu_usage_log.txt
というファイルにCPU使用率が記録されます。
アラートシステムの構築
CPU使用率が特定の閾値を超えた場合に、アラートを表示するシステムを構築することができます。
以下は、CPU使用率が80%を超えた場合にアラートを表示する例です。
using System;
using System.Diagnostics;
using System.Threading;
class CpuAlertSystem
{
static void Main()
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
while (true)
{
// 1秒待機
Thread.Sleep(1000);
// CPU使用率を取得
float cpuUsage = cpuCounter.NextValue();
// CPU使用率が80%を超えた場合にアラートを表示
if (cpuUsage > 80)
{
Console.WriteLine($"警告: CPU使用率が高いです!使用率: {cpuUsage}%");
}
else
{
Console.WriteLine($"CPU使用率: {cpuUsage}%");
}
}
}
}
CPU使用率: 75.0%
CPU使用率: 82.0%
警告: CPU使用率が高いです!使用率: 82.0%
CPU使用率: 70.0%
...
これらの応用例を通じて、C#を使用してシステムのパフォーマンスを監視し、必要に応じてアクションを取ることができるようになります。
まとめ
この記事では、C#を使用してCPU使用率を取得する方法や、実際のアプリケーションでの実装例、さらには応用例について詳しく解説しました。
これにより、システムのパフォーマンスを監視するための具体的な手法を理解することができるでしょう。
今後は、これらの知識を活用して、より効率的なシステムモニタリングやパフォーマンス管理を行ってみてください。