36
PerformanceCounter cpuload = new PerformanceCounter();
cpuload.CategoryName = "Processor";
cpuload.CounterName = "% Processor Time";
cpuload.InstanceName = "_Total";
Console.WriteLine(cpuload.NextValue() + "%");

出力は常に 0% ですが、cpuload.RawValueは 736861484375 程度ですが、 で何が起こったのNextValue()でしょうか?

4

2 に答える 2

50

最後の値と比較するものが何もないため、カウンターの最初の反復は常に 0 になります。これを試して:

var cpuload = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");

その後、いくつかのデータが出てくるはずです。一定のグラフまたは更新されたシナリオで見られるように作られています...そのため、この問題に頻繁に遭遇することはありません。

MSDN リファレンスは次のとおりです。

メソッド nextValue() は、最初の呼び出しで常に 0 値を返します。したがって、このメソッドをもう一度呼び出す必要があります。

于 2010-02-02T04:18:43.437 に答える
24

最初に最初の値を取得します (0 になります)

NextValue();

その後、1000ミリ秒待ちます

Thread.Sleep(1000);

次に、実際の CPU 使用率である 2 番目の値を取得します。

NextValue();

コードは次のようになります。

float perfCounterValue = perfCounter.NextValue();

//Thread has to sleep for at least 1 sec for accurate value.
System.Threading.Thread.Sleep(1000);

perfCounterValue = perfCounter.NextValue();

Console.WriteLine("Value: {0}", perfCounterValue);
于 2011-01-17T09:02:54.650 に答える