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を使用しリッチなデータ表現を実現してください。