Служба WCF останавливается, чтобы порождать потоки - PullRequest
3 голосов
/ 03 февраля 2011

У меня есть служба WCF, размещенная в службе Windows, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple

Привязка nettcp настроена с listenbacklog = "512", а поведение службы настроено с maxConcurrentCalls ="512"

Сервер и клиент работают на четырехъядерных процессорах, ничего не делая.

Мой тестовый клиент использует автоматически сгенерированный прокси-сервер и выполняет 25 асинхронных вызовов в 25 потоках пула потоков.Хотя число потоков медленно увеличивается до всех 25, оно сразу порождает 10 потоков и затем запускает дополнительный поток каждую секунду или около того.Сервер WCF создает 2-3 потока для обслуживания запросов.Работа, выполняемая функцией сервиса, занимает несколько сотен миллисекунд.На завершение всех вызовов клиента требуется около 20 секунд настенного времени.

Я профилировал сервер WCF и большую часть своего времени он проводит в ThreadStart_Context, вызывая waitone ()

Может кто-нибудь сказать мне, почему это так медленно?

1 Ответ

0 голосов
/ 06 декабря 2013

Я думаю, что причиной этого поведения является ThreadPool, который использует WCF.Он не порождает потоки слишком часто (2 в секунду после достижения минимума).Таким образом, вы можете попробовать увеличить минимальный размер ThreadPool (сначала прочтите о последствиях этого шага).Или вы можете проверить, можно ли использовать замену для ThreadPool в этом случае.

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