[C#] PerformanceCounterでメモリ使用量を取得する方法
C#でPerformanceCounter
を使用してメモリ使用量を取得するには、まずSystem.Diagnostics
名前空間をインポートします。
次に、PerformanceCounterクラス
のインスタンスを作成し、カウンターのカテゴリ、カウンター名、およびインスタンス名を指定します。
メモリ使用量を取得するには、カテゴリに”Memory”、カウンター名に”Available MBytes”を指定します。
これにより、システムで利用可能なメモリ量をメガバイト単位で取得できます。
NextValueメソッド
を呼び出すことで、現在のメモリ使用量を取得できます。
注意点として、PerformanceCounter
は管理者権限が必要な場合があるため、適切な権限で実行する必要があります。
PerformanceCounterを使ったメモリ使用量の取得
C#のPerformanceCounterクラス
を使用すると、システムのパフォーマンスデータを簡単に取得できます。
コンソールからの場合は、dotnet add package System.Diagnostics.PerformanceCounter
でインストールできます。
特に、メモリ使用量を監視する際に非常に便利です。
このセクションでは、PerformanceCounter
を使ってメモリ使用量を取得する方法について詳しく解説します。
PerformanceCounterクラスのインスタンス作成
まず、PerformanceCounterクラス
のインスタンスを作成する必要があります。
以下のコードは、PerformanceCounter
のインスタンスを作成する方法を示しています。
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter memoryCounter = new PerformanceCounter();
}
}
カウンターの設定方法
PerformanceCounter
を使用するには、いくつかの設定が必要です。
以下に、設定方法を説明します。
カテゴリの指定
メモリ使用量を取得するためには、まず「メモリ」というカテゴリを指定します。
以下のように設定します。
memoryCounter.CategoryName = "Memory"; // カテゴリ名を指定
カウンター名の指定
次に、取得したいカウンター名を指定します。
メモリ使用量を取得する場合は Available Bytes
を指定します。
memoryCounter.CounterName = "Available Bytes"; // カウンター名を指定
インスタンス名の指定
インスタンス名は、特定のプロセスやスレッドを指定するために使用します。
メモリ使用量を取得する場合は、通常はインスタンス名を指定する必要はありません。
memoryCounter.InstanceName = ""; // インスタンス名は空で指定
メモリ使用量の取得方法
設定が完了したら、実際にメモリ使用量を取得することができます。
NextValueメソッドの使用
NextValueメソッド
を使用して、現在のメモリ使用量を取得します。
以下のコードは、メモリ使用量を取得し、コンソールに表示する例です。
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter memoryCounter = new PerformanceCounter();
// カテゴリ名を指定
memoryCounter.CategoryName = "Memory";
// カウンター名を指定
memoryCounter.CounterName = "Available Bytes";
// インスタンス名は空で指定
memoryCounter.InstanceName = "";
// メモリ使用量を取得
float availableMemory = memoryCounter.NextValue();
// 結果を表示
Console.WriteLine($"利用可能なメモリ: {availableMemory} バイト");
}
}
このコードを実行すると、現在の利用可能なメモリ量が表示されます。
利用可能なメモリ: 123456789 バイト
このように、PerformanceCounter
を使用することで、簡単にメモリ使用量を取得することができます。
実装例
ここでは、PerformanceCounter
を使用してメモリ使用量を取得するシンプルなプログラムの実装例を示します。
また、取得したデータの表示方法やエラーハンドリングについても解説します。
シンプルなメモリ使用量取得プログラム
以下のコードは、メモリ使用量を取得するシンプルなプログラムです。
このプログラムは、利用可能なメモリ量を定期的に取得し、コンソールに表示します。
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter memoryCounter = new PerformanceCounter();
// カテゴリ名を指定
memoryCounter.CategoryName = "Memory";
// カウンター名を指定
memoryCounter.CounterName = "Available Bytes";
// インスタンス名は空で指定
memoryCounter.InstanceName = "";
// 定期的にメモリ使用量を取得
while (true)
{
// メモリ使用量を取得
float availableMemory = memoryCounter.NextValue();
// 結果を表示
Console.WriteLine($"利用可能なメモリ: {availableMemory} バイト");
// 1秒待機
Thread.Sleep(1000);
}
}
}
このプログラムを実行すると、1秒ごとに利用可能なメモリ量が表示されます。
取得したデータの表示方法
取得したデータは、コンソールに表示することが一般的です。
上記のプログラムでは、Console.WriteLineメソッド
を使用して、利用可能なメモリ量を表示しています。
必要に応じて、フォーマットを変更することも可能です。
例えば、メモリ量をメガバイト単位で表示したい場合は、以下のように変更できます。
Console.WriteLine($"利用可能なメモリ: {availableMemory / (1024 * 1024)} MB");
エラーハンドリング
プログラムが正常に動作するためには、エラーハンドリングが重要です。
PerformanceCounter
を使用する際には、特に以下の点に注意が必要です。
- カテゴリ名やカウンター名が正しいか確認する
PerformanceCounter
のインスタンス作成時に例外が発生する可能性がある
以下は、エラーハンドリングを追加した例です。
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
try
{
// PerformanceCounterのインスタンスを作成
PerformanceCounter memoryCounter = new PerformanceCounter();
// カテゴリ名を指定
memoryCounter.CategoryName = "Memory";
// カウンター名を指定
memoryCounter.CounterName = "Available Bytes";
// インスタンス名は空で指定
memoryCounter.InstanceName = "";
// 定期的にメモリ使用量を取得
while (true)
{
// メモリ使用量を取得
float availableMemory = memoryCounter.NextValue();
// 結果を表示
Console.WriteLine($"利用可能なメモリ: {availableMemory / (1024 * 1024)} MB");
// 1秒待機
Thread.Sleep(1000);
}
}
catch (Exception ex)
{
// エラーが発生した場合の処理
Console.WriteLine($"エラーが発生しました: {ex.Message}");
}
}
}
このように、try-catch
ブロックを使用することで、エラーが発生した際に適切なメッセージを表示することができます。
これにより、プログラムの安定性が向上します。
応用例
PerformanceCounter
を使用することで、メモリ使用量の取得だけでなく、さまざまな応用が可能です。
ここでは、メモリ使用量のログ記録、リアルタイムモニタリングの実装、他のシステムリソースの監視について解説します。
メモリ使用量のログ記録
メモリ使用量を定期的に取得し、ログファイルに記録することで、後から分析することができます。
以下のコードは、メモリ使用量をログファイルに記録する例です。
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
class Program
{
static void Main(string[] args)
{
PerformanceCounter memoryCounter = new PerformanceCounter();
memoryCounter.CategoryName = "Memory";
memoryCounter.CounterName = "Available Bytes";
memoryCounter.InstanceName = "";
// ログファイルのパス
string logFilePath = "memory_log.txt";
while (true)
{
float availableMemory = memoryCounter.NextValue();
string logEntry = $"{DateTime.Now}: 利用可能なメモリ: {availableMemory / (1024 * 1024)} MB";
// ログファイルに記録
File.AppendAllText(logFilePath, logEntry + Environment.NewLine);
Thread.Sleep(1000);
}
}
}
このプログラムを実行すると、1秒ごとに利用可能なメモリ量がmemory_log.txt
ファイルに記録されます。
リアルタイムモニタリングの実装
リアルタイムでメモリ使用量を監視し、特定の条件を満たした場合にアラートを出すことも可能です。
以下のコードは、利用可能なメモリが一定の閾値を下回った場合に警告を表示する例です。
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
PerformanceCounter memoryCounter = new PerformanceCounter();
memoryCounter.CategoryName = "Memory";
memoryCounter.CounterName = "Available Bytes";
memoryCounter.InstanceName = "";
float threshold = 100 * 1024 * 1024; // 100 MBの閾値
while (true)
{
float availableMemory = memoryCounter.NextValue();
if (availableMemory < threshold)
{
Console.WriteLine("警告: 利用可能なメモリが閾値を下回りました!");
}
Thread.Sleep(1000);
}
}
}
このプログラムでは、利用可能なメモリが100MBを下回ると警告メッセージが表示されます。
他のシステムリソースの監視
PerformanceCounter
はメモリ以外にも、CPU使用率やディスクI/Oなど、さまざまなシステムリソースを監視することができます。
以下は、CPU使用率を取得する例です。
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
while (true)
{
float cpuUsage = cpuCounter.NextValue();
Console.WriteLine($"CPU使用率: {cpuUsage}%");
Thread.Sleep(1000);
}
}
}
このプログラムを実行すると、1秒ごとにCPU使用率が表示されます。
このように、PerformanceCounter
を使用することで、さまざまなシステムリソースを簡単に監視することができます。
まとめ
この記事では、C#のPerformanceCounter
を使用してメモリ使用量を取得する方法について詳しく解説しました。
具体的には、PerformanceCounterクラス
のインスタンス作成から、カウンターの設定、メモリ使用量の取得方法、さらには実装例や応用例に至るまで、幅広く取り上げました。
これを機に、実際のプロジェクトにおいてシステムリソースの監視を行う際には、PerformanceCounter
を活用してみてください。