6

フローコードを使用していますが、カテゴリが存在しないと表示されます。

static PerformanceCounter cpuUsage;

public static void Main(string[] args)
{
    cpuUsage = new PerformanceCounter("Processor", "% Processor Time", "_Total");

    Console.WriteLine(cpuUsage.NextValue() + " %");
    Thread.Sleep(1000);
    Console.WriteLine(cpuUsage.NextValue() + " %");
    Console.Read();
}
4

6 に答える 6

18

こんにちは!

この問題の主な原因は、レジストリ内のパフォーマンスカウンタへのポインタがランダムに破損しているように見えることです。これはまれにしか発生しませんが、ほとんどの場合、Windows Server2008R2で発生します。

厳密に言えば、「Process」および「Processor」カテゴリは、デフォルトでパフォーマンスカウンタとして常に存在する必要があります。それらが欠落している場合は、他にも多くのカウンターが欠落している可能性があります。「プロセッサ情報」カウンタも破損している場合、以前のソリューションでは問題を解決できませんでした。これを確実に解決するには、次のコマンドを実行できます。

lodctr /R

これにより、カウンターへの壊れたポインターが修復されます。このソリューションを確認するには、[サーバーマネージャー]->[監視]->[パフォーマンスモニター]->[追加...]に移動します。このビュー内で、現在登録されているすべてのパフォーマンスカウンターを表示できます。これで、「Processor」と「Process」の両方が使用可能になります。または、次のコマンドを実行して、使用可能なすべてのカウンターのステータスを表示することもできます。

lodctr /Q

補足として、このコマンドは管理コンソールから実行する必要があります。そうしないと、このプロセスが「エラーコード:5(アクセス拒否)」で失敗する可能性があります。

于 2016-01-05T15:34:56.570 に答える
6

使用する

new PerformanceCounter("Processor Information", "% Processor Time", "_Total");

それ以外の

new PerformanceCounter("Processor", "% Processor Time", "_Total");
于 2012-09-16T04:26:06.507 に答える
1

問題のパフォーマンスカウンターが有効になっていることを確認します。一部のサーバーで多数のカウンターが無効になっていることがわかりました。

無効になっているカウンターを見つけるためのPowerShellは次のとおりです。

Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Services\*\Performance | 
    Where-Object { ($_ | Get-ItemProperty -Name 'Disable Performance Counters' -ea Ignore).'Disable Performance Counters' -eq 1 }

無効になっているすべてのカウンターを再度有効にするために使用したPowerShellは次のとおりです。

Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Services\*\Performance | 
    Where-Object { ($_ | Get-ItemProperty -Name 'Disable Performance Counters' -ea Ignore).'Disable Performance Counters' -in @(0,1) } | 
    Remove-ItemProperty -Name 'Disable Performance Counters' -Verbose -WhatIf

Disable Performance Countersキー値をに設定する代わりに削除することを選択した0ため、-in @(0,1)上記の句を使用しました。

一部のASP.NETカウンターのDisable Performance Counters値が4またはに設定されました2。私はそれらを放っておいた。

于 2018-07-26T20:52:38.750 に答える
1

もう少し具体的に言うと、イベントビューアを確認して、PerfLibイベントを探すことができます。

私の場合、それらはエラーでマークされていました。

次に、周りを見回した後、上記で説明した2つのコマンドを見つけました。私の場合、問題はperfOSにありました。(いつでも実行lodctr /q:Perflibして、何が無効になっているかを確認できます。

次に、次のコマンドを実行します。lodctr / e:perfOS(または、無効になっているサービスのperfOSを変更します)

それでうまくいくでしょう(少なくとも私にとってはうまくいきました)

TLDR:実行lodctr /q:perfOslodctr /e:perfOSて管理者として

于 2019-10-30T13:36:26.830 に答える
0

この静的メソッドを使用します(MSDN):

PerformanceCounterCategory.GetCategories()

マシンに登録されているすべてのカテゴリの配列を取得します。おそらくProcessorローカライズされています。

すべてのカウンターを取得するコードについては、このSOの回答を参照してください。

于 2012-09-15T09:56:10.130 に答える
-1

私の最後ではうまく機能しています。画像を見てください。

于 2012-09-15T08:47:05.400 に答える