Можно ли записать время, необходимое для сериализации объектов, возвращаемых из веб-службы? - PullRequest
3 голосов
/ 08 декабря 2010

Мы рассматриваем некоторые проблемы с производительностью веб-службы, которую мы вызываем.Мне удалось разместить код записи времени во всех фактических методах веб-сервиса, но теперь мне кажется, что проблема может заключаться в том, что фактическое время, необходимое для сериализации набора результатов?эти данные берутся, но изо всех сил пытаются получить какие-либо результаты ..

Вот пример нашего метода веб-службы:

[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 ]

2 голосов
/ 08 декабря 2010

Вы можете использовать Custom SoapExtension .В методе ProcessMessage () вы можете увидеть 4 события: до и после сериализации и до и после десериализации.Запустите секундомер в «Перед», завершите его в «После», затем сохраните время где-нибудь.

0 голосов
/ 08 декабря 2010

Вы должны использовать что-то вроде Ants profiler (подойдет eval-версия) для профилирования этих методов. Это даст вам очень хорошее понимание.

0 голосов
/ 08 декабря 2010

Не могли бы вы использовать средство просмотра трассировки службы, чтобы узнать, сколько времени занимает каждый запрос?

0 голосов
/ 08 декабря 2010

Деформация вызова вокруг Секундомер Объект

из памяти:

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