ASP.NET アプリケーションで使用する一連のカスタム パフォーマンス カウンターを作成しようとしています。次のコードを使用してカウンターをインクリメントします。
internal static void Increment(String instanceName, DistributedCacheCounterInstanceType counterInstanceType)
{
var permission = new PerformanceCounterPermission(PerformanceCounterPermissionAccess.Write, Environment.MachineName, "CounterName");
permission.Assert();
var counter = new PerformanceCounter("CategoryName", "CounterName", instanceName, false);
counter.RawValue++; // Use RawValue++ instead of Increment() to avoid locking
counter.Close();
}
これは、単体テストと私の開発ボックス (Vista Business x64) の Cassini で完全に機能し、パフォーマンス モニターでカウンターの動作を確認できます。ただし、カウンターは私の実稼働環境 (Win Server 2003 x64) ではインクリメントを登録していないようです。カウンター インスタンス自体は利用可能ですが、それらはすべて、最新/平均/最小/最大表示に対して "--" を表示するだけです。
私が間違っている可能性があることについてのアイデアはありますか?
編集:これは、私が参照用に使用した [おそらく多少古い] MSDN の記事です。
編集 2:違いがあれば、VS 2008/.NET Framework v3.5 SP1 を使用しています。
編集 3: 32 ビット/64 ビット アプリとモニターの不一致に関するこの記事を見つけましたが、それが私の状況にどのように適用されるかはわかりません。Cassini は確かに 32 ビット アプリですが、64 ビット システムで値を表示するのに問題はありませんでした。私の運用サーバーでは、アプリとシステムの両方が 64 ビットですが、値が表示されません。
編集 4:運用サーバーで 32 ビットの perfmon を実行すると、値が表示されます。では、64 ビットの perfmon で値を読み取れないのはなぜでしょうか?
編集 5:実際には機能しているように見えますが、カウンターが作成される前に開いていたため、perfmon のインスタンスを再起動する必要がありました。