Настройки сервиса WCF для именованных каналов - PullRequest
3 голосов
/ 18 февраля 2010

Стоит ли устанавливать службу с атрибутами ConcurrencyMode.Multiple и InstanceContextMode.Single для сохранения производительности при использовании именованных каналов?

Я имею в виду, что когда я делаю это, мне приходится сталкиваться с проблемами многопоточности.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2010

Я автоматически использую ConcurrencyMode.Multiple для своих служб WCF, потому что обычно я ожидаю, что служба сможет обрабатывать несколько запросов одновременно. Мне кажется, что это наиболее интуитивное поведение для службы (т. Е. Было бы странно, если бы я позвонил в веб-службу и мне пришлось ждать 10 ожидающих запросов от других пользователей, прежде чем меня посещали).

Использование ConcurrencyMode.Single заставляет сервис обрабатывать один запрос за раз (в случае нескольких запросов они помещаются в очередь). Это, потенциально, замедлит запросы.

Но это зависит от того, что делает каждый запрос. Простые математические вычисления или манипуляции со строками будут настолько быстрыми, что накладные расходы WCF станут вашим главным узким местом. Если ваша служба запрашивает или изменяет какую-либо базу данных, время выполнения операции базы данных, скорее всего, станет вашим узким местом. Но если база данных небольшая, или вы ожидаете только небольшое количество клиентов, вы, вероятно, никогда не заметите разницу. Если вы извлекаете данные из 5 веб-служб и выполняете некоторые сложные операции слияния, это может быть проблемой.

Если вы не знаете, что у вас будет несколько одновременных запросов, запускайте с ConcurrencyMode.Отключайте, пока не будут выполнены какие-то объективные критерии производительности. Затем вам нужно будет сделать обычный бенчмаркинг, чтобы выяснить, какая часть вашего сервиса самая медленная. Ускорьте это. Если так получилось, что ConcurrencyMode.Single - медленный бит, вместо этого выберите несколько!

3 голосов
/ 18 февраля 2010

Стоит ли это того? Это зависит от того, насколько вы цените прирост производительности по сравнению с тем, насколько сложно это реализовать.

Насколько хорошо увеличение производительности? Это зависит от приложения. Только вы можете ответить на этот вопрос, измерив.

Как всегда с производительностью, вы должны измерить .

Если это уже достаточно быстро, не беспокойтесь.

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

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

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