2016-12-03 14 views
0

PhysicalDiskを使用してPerformanceCounterクラスのNextValueを取得しようとしています。理由を知ることができないと思う何らかの理由で、毎回0が返されます。NextValue()returnの0

PerformanceCounter pcDiskTime = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total"); 
    Single sinDisk = pcDiskTime.NextValue(); //returns 0.0 

以上を使用してpcDiskTime.NextValueリターンの0を呼び出します。私は他のカウンターがうまく働いて、必要なものを返す。

.RawValue何かを返すが、私が必要とする価値ではない。私がやっていないことが明らかなことはありますか?

注:私はPerformance Monitorによってこれらが確かに正しいカテゴリ、カウンタ名およびインスタンス名であることを確認しました。私も.NextValue()を2度目の最初の返信の0.0と呼ぶことを試みましたが、これは役に立ちません。

+0

MSDN: 'カウンタの計算値が2つのカウンタの読み取りに依存する場合、最初の読み取り操作は0.0を返します。 '毎回新しいカウンタを作成すると、NextValueが常に最初の呼び出しになります(これが2つの読み込みに依存するかどうかわからない場合) – Plutonix

+0

@Plutonixの良い点、他のカウンタの中には2つの読み込みが必要なものがあります。 ;私のポストでこれを言及するのを忘れました。提案に感謝します。 – Codexer

答えて

3

比較する前の値がないため、初めてゼロを返します。以下のようにします。

PerformanceCounter pcDiskTime = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total"); 
//first time call 
float perfCounterValue = pcDiskTime.NextValue(); 
//wait some time 
System.Threading.Thread.Sleep(1000); 
//get the value again 
perfCounterValue = pcDiskTime.NextValue(); 

カウンタの計算値は、2つのカウンタ読み出しに依存している場合、 最初の読み出し動作が0.0を返します。パフォーマンスカウンタ のプロパティをリセットして別のカウンタを指定することは、新しいパフォーマンスカウンタ を作成することに相当し、新しい プロパティを使用した最初の読み取り操作は0.0を返します。 への呼び出しとNextValueメソッドとの間の推奨遅延時間は、カウンタが次のインクリメンタルリードを で実行できるように1秒です。

+0

ああ、スレッドを眠ってそれをやった!私はスレッドを眠っているとは信じられません、それは私がこれをしたように2回呼び出されていない、ちょうどスレッドをスリープ状態ではなかった。ありがとうございました! – Codexer

関連する問題