3

独自のパフォーマンス カウンターの束を使用する一種のライブラリがあります。しかし、そのパフォーマンス カウンターがインストールされていなくても、ライブラリが正常に動作することを望みます。

そのため、PerformanceCounter の周りにラッパーを作成し、最初の使用時に PerfCounter が存在するかどうかを確認しました。それらが存在する場合、代わりにネイティブの PerformanceCounter を使用しています。何もしないラッパーを使用しています。

したがって、パフォーマンスカウンターの存在を確認するには、 PerformanceCounterCategory.Exists を使用します

問題は、そのようなカテゴリがない場合、PerformanceCounterCategory.Exists の呼び出しに (私のマシンでは) 約 10 秒かかることです! 遅すぎるのは言うまでもありません。

私に何ができる?

自分で試すためのコード: システムを使用。System.Diagnostics を使用します。

class Program
{
    static void Main(string[] args)
    {
        var ts = Stopwatch.StartNew();
        var res = PerformanceCounterCategory.Exists("XYZ");
        Console.WriteLine(ts.ElapsedMilliseconds);
        Console.WriteLine("result:" + res);
}
}
4

2 に答える 2

6

これは避けられないようです。MSDN から:

Exists メソッドを使用すると、マシン上のすべてのパフォーマンス カウンターの可用性がチェックされるときに、パフォーマンスが大幅に低下する可能性があります。 パフォーマンス カウンターにのみ書き込みを行う場合は、アプリケーションのインストール時にパフォーマンス カウンターを作成し、カウンターへのアクセス時にカテゴリが存在すると想定することで、パフォーマンス カウンターのグローバル検索を回避できます。パフォーマンス カウンターから読み取るときに、パフォーマンス カウンターの検索を回避する方法はありません。

強調は私です。

于 2010-04-16T17:58:18.920 に答える