CPUの使用率を測定する
今回、CPUの使用率を測定する方法として、パフォーマンスカウンタを使用します。MSDNのCodeRecipe逆引きサンプルコードに実装例が記載されていますので、[C#]CPUの使用率を特定の間隔で測定する方法、[VB]CPUの使用率を特定の間隔で測定する方法を参照し、ロード時にパフォーマンスカウンタの値を定期的に取得するコードを作成します。
まず、Windowがロードされた時点でイベントを発生させます。
<Window x:Class="NA_CpuGauge.MainWindow"
…
Loaded="CpuGaugeWindow_Loaded">
<Grid>
…
</Grid>
</Window>
イベントハンドラー内でPerformanceCounter、DispatcherTimerを初期化し、CPUの現在の使用率を取得するように設定します。
private PerformanceCounter pc;
private DispatcherTimer timer;
private void CpuGaugeWindow_Loaded(object sender, RoutedEventArgs e)
{
// パフォーマンス カウンタを初期化します。
pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
// タイマーの初期化を行います。
timer = new DispatcherTimer();
// 1 秒単位で繰り返し処理を行います。
timer.Interval = TimeSpan.FromMilliseconds(1000);
// 処理の内容はこのデリゲートに記述します。
timer.Tick += new EventHandler(timer_Tick);
// タイマーを開始します。
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
// 現在の値を取得し、ゲージの値を設定します。
Needle1.Value = pc.NextValue();
}
このPerformanceCounterはアンマネージリソースであるため、使用後に明示的に解放する必要があります。今回は暫定的にClosingイベント内でDisposeメソッドを呼び出すことにします。
<Window x:Class="NA_CpuGauge.MainWindow"
…
Closing="CpuGaugeWindow_Closing">
<Grid>
…
</Grid>
</Window>
private void CpuGaugeWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// パフォーマンス カウンタを解放します。
pc.Dispose();
}
実行すると現在のCPU使用率が表示されます。

滑らかにアニメーション
このゲージは1秒おきに値の変更が即座に反映されるため、動きがスムーズではありません。値の変更を滑らかにする場合、Needle.Responseプロパティを設定します。
<ig:XamRadialGauge Name="xamRadialGauge1">
<ig:RadialGaugeScale.Needles>
<ig:RadialGaugeNeedle x:Name="Needle1">
<ig:RadialGaugeNeedle.Response>
<ig:GaugeMarkerResponse RefreshRate="00:00:00.0100000" Enabled="True" ResponseTime="00:00:03" />
</ig:RadialGaugeNeedle.Response>
</ig:RadialGaugeNeedle>
</ig:RadialGaugeScale.Needles>
</ig:RadialGaugeScale>
</ig:XamRadialGauge.Scales>
</ig:XamRadialGauge>
まとめ
今回はVisual Studio 2010を用いてCPU利用率を計測するガジェットの作成を行いました。データ視覚化の活用は今後他社のソリューションとの差別化において非常に有用ではないでしょうか。ぜひNetAdvantage WPF Data Visualizationを使用しリッチなデータ表現を実現してください。

