У меня есть служба WCF, которая используется синхронно, но для ее ConcurrencyMode установлено значение ConcurrencyMode.Multiple, поскольку на самом деле служба не имеет состояния. Сколько накладных расходов накладывает этот режим? Есть ли смысл менять режим на ConcurrencyMode.Single?
WCF. Накладные расходы ConcurrencyMode.Multiple
Ответы (1)
На самом деле это не требует каких-либо накладных расходов, кроме того факта, что один экземпляр службы должен обрабатывать одновременный доступ, он должен быть на 200% потокобезопасным, а это довольно сложное программирование.
Переключение на ConcurrencyMode.Single упрощает программирование — больше не нужно беспокоиться о параллелизме в классе обслуживания. Но он сериализует все запросы - только один за раз может быть обработан, и поэтому быстро станет узким местом в производительности.
Вы упомянули, что ваша служба не имеет гражданства, так почему бы не использовать обычно согласованную передовую практику - не одноэлементный, а обычный класс обслуживания "за вызов". В этом режиме каждый запрос получает новый новый экземпляр вашего класса обслуживания, нет необходимости суеты по поводу необходимости многопоточного программирования (вся многопоточность обрабатывается средой выполнения WCF), вы получаете параллельную обработку нескольких запросов - для меня это только преимущества и минусов нет!