是否可以记录序列化从Web服务返回的对象所需的时间?

时间:2010-12-08 11:40:00

标签: c# web-services performance serialization deserialization

我们正在调查我们正在调用的Web服务的一些性能问题。 我已经设法在整个实际的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 个答案:

答案 0 :(得分:2)

您可以使用Custom SoapExtension。在ProcessMessage()方法中,您可以看到4个事件,序列化之前和之后以及反序列化之前和之后。在Befores中启动秒表,在Afters上结束秒表,然后将时间存放在某个地方。

答案 1 :(得分:0)

围绕Stopwatch对象

扭曲调用

来自记忆:

  Stopwatch sw = Stopwatch.Startnew();
  //stuff
  sw.Stop();
  print sw.ElapsedMilliseconds();

答案 2 :(得分:0)

无法使用服务跟踪查看器检查每个请求的持续时间吗?

答案 3 :(得分:0)

你应该使用像Ants profiler这样的东西(eval版本会这样做)来描述那些有问题的方法。它会给你一个很好的洞察力。