- PR -

C# パフォーマンスカウンタのCPU負荷情報が取得できない

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-02-23 15:13
パフォーマンスカウンタから
CPUの使用率(Processor/% Processor Time)
およびCPUのIdle率(Processor/% Idle Time)
の取得を試みますが、常に0が返されます。
ソースコードに誤りがあるのでしょうか?
あるいはパフォーマンスカウンタに障害が発生しているのでしょうか?
アドバイス宜しくお願いします。

現象
1,CpuInfo.ProcessorTime,CpuInfo.IdleTimeの両方とも0が返される。
2.PagingFileInfo.UsagePercents()は意味がある値が返される。
3.コントロールパネル→コンピュータの管理→パフォーマンスモニターのグラフは意味がある値を
 逐次表示していることを確認済みである。
4.カテゴリは追加済みである。(Processor/% Processor Time,Processor/% Idle Time)

// ***** ソースコード *****

namespace PerformanceCounter
{
using System;
using System.Diagnostics;

/// <summary>
/// ページングファイル情報
/// </summary>
public abstract class PagingFileInfo
{

/// <summary>
/// 全体の使用率[%]
/// </summary>
/// <returns></returns>
public static float UsagePercents()
{

return PC.NextValue("Paging File","% Usage","_total");
}

}

/// <summary>
/// CPU情報
/// </summary>
public abstract class CpuInfo
{
/// <summary>
/// CPU使用率
/// </summary>
public static float ProcessorTime
{
get
{
return PC.NextValue("Processor","% Processor Time","_Total",".");
}
}

/// <summary>
/// CPU空き率
/// </summary>
public static float IdleTime
{
get
{
return PC.NextValue("Processor","% Idle Time","_Total",".");
}
}

}

/// <summary>
/// PerformanceCounter情報を取得する
/// </summary>
public abstract class PC
{

public static float NextValue(string categoryName,string counterName,string instanceName)
{
System.Diagnostics.PerformanceCounter counter1 = new PerformanceCounter(categoryName,counterName,instanceName,true);
return counter1.NextValue();
}

public static float NextValue(string categoryName,string counterName,string instanceName,string machineName)
{
System.Diagnostics.PerformanceCounter counter1 = new PerformanceCounter(categoryName,counterName,instanceName,machineName);
return counter1.NextValue();
}

public static bool CategoryExists(string categoryName,string counterName,string machineName)
{
bool ans = false;
if(PerformanceCounterCategory.Exists(categoryName,machineName))
{
if(PerformanceCounterCategory.CounterExists(counterName,categoryName,machineName))
{
ans = true;
}

}
return ans;

}
}
}
1

スキルアップ/キャリアアップ(JOB@IT)