3

Web サービスでビジネス クラスのパフォーマンスを測定したいと考えています。コーディングを通じてどのように行うことができますか?

ビジネス クラスが操作を実行するために消費する CPU の量と、Web サービスが複数の同時サービス呼び出しを取得した場合にパフォーマンスがどのように変化するかを知りたいです。

Web サービスのパフォーマンスを測定したくありません。ビジネスクラスのパフォーマンスを知りたいだけです。

私の考え:

PerformanceCounterいくつかのブログを読んだ後、以下に示すように を作成するコードを書くことにしました。forそのコードから、1 つのループで複数のスレッドを作成できます。各スレッドは私のクラスを呼び出します。同じforループでNextValue()、カウンター インスタンスのメソッドを呼び出します。

System.Diagnostics.PerformanceCounter CpuCounter = new System.Diagnostics.PerformanceCounter();
            CpuCounter.CategoryName = "Process";
            CpuCounter.CounterName = "% Processor Time";
            CpuCounter.InstanceName = Process.GetCurrentProcess().ProcessName;

質問:

  1. このアプローチは正しいですか?
  2. 「プロセス」カテゴリまたは「プロセッサ」カテゴリを使用する必要がありますか?
  3. パフォーマンス データを取得してレポートを作成するにはどうすればよいですか? たとえば、100 の同時スレッドでは CPU 使用率は 70% で、200 のスレッドでは最大 90% になります。
  4. 私のビジネス ロジックはすぐに終了します。一方、メソッドは、このブログNextValue()で述べたように、1 秒間隔で正しい値を返します。どうすればこれを処理できますか?
  5. メソッドが 100 を超える値を返すことがありNextValue()ます。これは、CPU 使用率が 100% を超えているということですか? (このカウンターの値は、CPU の使用率として解釈されるべきではないと思います。私は正しいですか?)

注: Windows 7 プレミアムと Intel Core i5 プロセッサを使用しています。パフォーマンス カウンターを使用するのはこれが初めてです。したがって、いくつかの質問はばかげているかもしれません。

4

1 に答える 1

4

以下の質問に順番に答えました。

1: ビジネス クラスがプロファイリング中にアクティブなアプリケーションの唯一の部分である場合、はい。ただし、Perfmon はアプリケーション全体の大規模なプロファイリングに最適であり、実際には特定のメソッド用に設計されているわけではありません。BusinessClass.Work() を完了するのに必要な CPU サイクル数を調べるには、JetBrains dotTrace や Redgate の ANTS プロファイラーなどを使用することをお勧めします。これらの製品はどちらも無料試用版を提供しています。

2: プロセスは、あなたがしていることの正しいカウンターです

3: 独自のカウンターを追加するか、タイム スライスでテストを実行できます。これを行うより簡単な方法はタイム スライス アプローチです。この方法では、基本的に一連のテストを実行し、各テスト間で 1 つの変数のみを変更します。テストの合間に、アクティビティがない状態で 5 ~ 10 秒間待機します。これにより、perfmon グラフがうまく中断されます。ここで説明されているパフォーマンス カウンター ログもセットアップする必要があります

4: 回答 1 を参照してください。メソッド レベルのタイミングについては、プロファイラーの方がはるかに優れています。

5: これは予期されたものです。最大 CPU % は、実際には 100 * プロセッサ数になります。したがって、i5 がデュアル コアの場合、最大値は 200%、クアッドの場合は 400% などです。

ご不明な点がございましたら、お知らせください。

于 2012-07-16T13:02:50.023 に答える