- - PR -
C# パフォーマンスカウンタのCPU負荷情報が取得できない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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