3

呼び出しているWebサービスのパフォーマンスの問題をいくつか調べています。実際のWebサービスメソッド自体全体にタイムレコーディングコードを配置することができましたが、結果セットのシリアル化にかかる実際の時間が問題になる可能性があるように見えますか?

したがって、このデータのシリアル化にかかる時間を記録しようとしていますが、結果を得るのに苦労しています。

これが私たちが持っているウェブサービスメソッドの例です:

[AuthExtension]
[WebMethod]
[SoapHeader("AuthHeader", Direction = SoapHeaderDirection.In)]
public ResultSet CheckAvailability(FareSelections fareSelections)
{
    ResultSet results = null;
    results = Logic.CheckAvailability(fareSelections, AuthHeader.Token, timeLogger);
    return results;
}

[OnSerializing()]および[OnSerialized()]属性で装飾されたメソッドを返されるクラスに配置しようとしましたが、これは機能しません。また、try..finallyブロックを使用してメソッドのタイミングをキャプチャしようとしましたが、これも実際のシリアル化時間を記録しているとは思いませんか?

独自のシリアライザーを実装する必要があるかもしれないと提案されていますが(タイミングを記録してから、とにかくデフォルトのシリアライザーを呼び出すだけです)、これが私が持っている唯一のオプションであるかどうか疑問に思っていましたか?

どんな考えでも大歓迎です。

4

4 に答える 4

2

カスタム SoapExtensionを使用できます。ProcessMessage() メソッドでは、シリアル化の前後とシリアル化の前後の 4 つのイベントを確認できます。Befores でストップウォッチを開始し、Afters で終了してから、時間をどこかに保存します。

于 2010-12-08T11:47:47.930 に答える
0

サービストレースビューアを使用して、各リクエストにかかる時間を確認できませんでしたか?

于 2010-12-08T11:51:59.610 に答える
0

問題のメソッドをプロファイリングするには、 Antsプロファイラー(評価バージョンで十分)のようなものを使用する必要があります。これにより、非常に優れた洞察が得られます。

于 2010-12-08T11:53:06.890 に答える
0

Stopwatchオブジェクトの周りで呼び出しをワープする

記憶から:

  Stopwatch sw = Stopwatch.Startnew();
  //stuff
  sw.Stop();
  print sw.ElapsedMilliseconds();
于 2010-12-08T11:45:58.297 に答える