WCF protobuf-net с потоковым режимом передачи работает хуже, чем с буферизованным

Я анализирую эффективность услуг WCF нашей компании целую неделю. Основная задача для меня - сравнить режимы передачи: буферизованные и потоковые. В некоторых сервисах мы используем стандартные контракты с сообщениями и protobuf-net в поведении конечных точек, а в некоторых других мы не используем сторонних разработчиков и используем WCF из коробки. Для своих тестов я использую профилировщик и анализирую деревья вызовов с выделением памяти. Я обнаружил, что с потоковым кодировщиком режим потоковой передачи работает лучше, чем буферизованный, в моем случае 2000 МБ против 400 МБ на тест. Но с protobuf-net я обнаружил, что потоковый режим работает хуже, чем буферизованный. В этом случае распределение памяти для обоих режимов одинаково, но производительность (время) в потоковом режиме снизилась со 140 с до 250 с на тест.

Из-за чего происходит?

UPD: тест прост. Запустите стандартную службу WCF и задайте поведение конечной точки protobuf с буферизованным (по умолчанию) режимом передачи и много раз запрашивайте результаты, содержащие много элементов для сериализации. Ваше распределение памяти будет X, время Y. Затем запустите тест в режиме потоковой передачи. Ваше распределение памяти будет таким же, но время Y*1,75. Я использую временную шкалу dotTrace для профилирования.

0 ответов

Другие вопросы по тегам