Измерьте время, проведенное в каждом слое веб-службы - PullRequest
3 голосов
/ 27 сентября 2011

У меня есть веб-служба REST WCF (.NET 4), дизайн которой основан на многоуровневой архитектуре (т.е. представление, логика, доступ к данным и т. Д.).Во время выполнения и без инструментов я хотел бы измерить, сколько времени занимает один запрос для каждого слоя (например, презентация = 2 мс, логика = 50 мс, данные = 250 мс).

Учитывая, что я не могу изменитьподпись метода для передачи в StopWatch (или что-то подобное), как бы вы достигли такой вещи?

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 сентября 2011

Если вы не можете добавить код в свое решение, вы в конечном итоге будете использовать профилировщики для проверки того, что делает код, но я бы рекомендовал это делать только в среде, отличной от рабочей, если только у вас не возникают проблемы с производительностью. Существует множество способов настроить другую среду и профиль под нагрузкой.

Профилировщики подключатся к вашему коду и изучат, сколько времени занимает каждый метод. Нет никакого волшебства «это - производительность бизнес-уровня», поскольку профилировщик понимает физические границы (класс, метод) вместо логических границ, но вы можете проверить вывод и определить скорость.

Если вы можете прикоснуться к коду, вы можете добавить другие опции, которые можно включать и выключать с помощью конфигурации. Поскольку вы заявили, что не можете изменить код, я полагаю, что это не вариант.

0 голосов
/ 28 сентября 2011

В MS Ent Lib есть трассировщик , синтаксически вы используете оператор using, а продолжительность всего, что происходит внутри оператора using, регистрируется в стандартной экосистеме ведения журналов Ent Lib.

использование (новый Tracer ()) { // Ваш код здесь. }

Подробнее базовая информация о MSDN здесь , а см. Здесь для ее конструкторов ; Существуют разные конструкторы, которые позволяют вам передавать разные идентификаторы, чтобы помочь вам отслеживать то, что записывается.

0 голосов
/ 27 сентября 2011

Недавно я работал над повышением производительности и изучал инструменты повышения производительности .NET. DotTrace кажется лучшим кандидатом на данный момент.

В частности, Performance Profiler может создавать профили трассировки. Эти профили подробно описывают, сколько времени занимает каждый метод:

Трассировка профилирования - очень точный способ профилирования, который включает получать уведомления от CLR всякий раз, когда функция введена или оставлена. Время между этими двумя уведомлениями принимается за исполнение время функции. Трассировка профилирования поможет вам узнать точное время информация и количество вызовов на функциональном уровне.

Этот снимок экрана иллюстрирует полезную статистику, которую может создать инструмент:

enter image description here

Вы сможете точно определить, сколько времени занимает один запрос для каждого слоя, путем проверки данных профилирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...