Как улучшить производительность в сервисе .net wcf - PullRequest
3 голосов
/ 19 февраля 2012

Я портирую тяжёлое процессорное приложение .net 4.0 windows на сервис .net 4.0 wcf.В основном я просто импортировал классы .net в службу wcf.

Все работает хорошо, за исключением производительности в службе wcf - задача, которая занимает 6267947 тиков (2539 мс), использует 815349861 тиков (13045 мс) в aspx.Сервис net wcf, работающий локально на той же машине разработки.

Я уже загрузил сервис + тестовый клиент в appharbor, где производительность такая же низкая, как и на моей локальной машине - ссылка на мое тестовое приложение: http://www.wsolver.com/. Есть идеи, как мне улучшить производительность?

Ответы [ 5 ]

3 голосов
/ 20 февраля 2012

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

Настройка производительности служб WCF

Оптимизация производительности веб-службы WCF

Использование ServiceThrottlingBehavior для управления производительностью службы WCF

Транспортные квоты

Оптимизация производительности IIS

Обзор производительности ASP.NET

Сравнение производительности Windows Communication Foundation (WCF) с существующими технологиями распределенной связи

3 голосов
/ 19 февраля 2012

Проверьте все зависимости от вашего сервиса, которые могут быть созданы во время запроса.Они включают зависимости конструктора и зависимости полей / свойств.Может быть, один из них вызывает задержку?Если это так, рассмотрите возможность использования одиночного экземпляра для создания экземпляра класса с длительным сроком действия.

Подтвердили ли вы, что последующие запросы по-прежнему вызывают задержку?

Также создайте новый сервис группы, который выполняет что-то простое, напримерDatetime.Now.toString () и посмотрите, есть ли у него такая же проблема.

2 голосов
/ 21 февраля 2012

Если вам необходимо выполнить трудоемкую инициализацию сложной структуры данных, вам следует выполнить это один раз в Application_Start() и назначить сгенерированную структуру данных статической переменной объекта MvcApplication.Выполнение этого только один раз при запуске приложения будет намного быстрее, чем при каждом запросе.

1 голос
/ 20 февраля 2012

Я бы взял полный дамп памяти в течение 13 секунд (или несколько, используя procdump), а затем внимательно посмотрел на то, что происходит в процессе (windbg и sos.dll). Затем вы можете определить, какой код является виновником.

0 голосов
/ 19 февраля 2012

Я так понимаю, что словарное дерево загружается только один раз, в кеш?Ты не загружаешь его при каждом звонке?

...