Как я могу профилировать издержки сериализации в моем приложении - PullRequest
1 голос
/ 02 ноября 2008

Мое приложение имеет уровень обслуживания WCF между внешним интерфейсом и базой данных. Поскольку в настоящее время мы размещаем IIS6, мы используем SOAP через HTTP. Как я могу узнать, сколько реального времени я трачу на выполнение сериализации в моем приложении?

Ответы [ 4 ]

4 голосов
/ 02 ноября 2008

Не об измерении, а об улучшении: я работаю над protobuf-net , реализацией "буферов протокола" Google (компактный формат двоичной сериализации с низким использованием ЦП) для использования с. NET - включая хук WCF (для замены DataContractSerializer). У него есть довольно хорошие метрики повторная сериализация.

При использовании с базовым http-связыванием он также работает с MTOM, так что вы даже не получаете издержки на двоичный код base-64. Здесь есть образец WCF здесь .

Это может быть интересно ...

1 голос
/ 02 ноября 2008

Создайте инспектор сообщений и добавьте его к поведению конечной точки,

В инспекторе сообщений реализован интерфейс, который имеет следующий метод

AfterReceiveRequest
{
  DateTime start = datetime.now;
  return start;
}
BeforeSendReply
{
 // start will be passed in as state in the parameter.  
 TimeSpan period = datetime.now - start 
}
0 голосов
/ 02 ноября 2008

Инструменты xperf являются хорошим выбором, если вы можете запустить на Windows Server 2008 и Vista на клиенте. Они основаны на ETW и используют примерное прерывание профиля Windows для профилирования всего, что работает в системе. Вот серия сообщений по инструментам xperf от меня. Этот пост специально о профилировании.

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

Возможно, вы захотите поэкспериментировать с некоторыми другими событиями ядра, такими как дисковый ввод-вывод и серьезные сбои.

0 голосов
/ 02 ноября 2008

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

Если вы не хотите изменять сигнатуру метода, вы можете установить ее в заголовке ответа http или что-то еще;)

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