Сервис WCF, который создает новый поток для каждого нового запроса

Вставка объекта в отсортированный список берет O(n) время, не O(log n) время. Необходимо найти, что место помещает его, беря O(log n) время. Но тогда необходимо сместиться по всем элементам - взятие O(n) время. Так вставка при поддержании отсортированного мыса O(n ^ 2), где как вставка их всех и затем сортировка O(n log n).

В зависимости от Вашей реализации вида, можно стать еще лучше, чем O(n log n), если количество вставок намного меньше, чем размер списка. Но если это так, это не имеет значения так или иначе.

Также - вставка все и решение для вида, если количество вставок является большим, иначе оно, вероятно, не будет иметь значения.

6
задан Nazgul 16 September 2009 в 05:57
поделиться

3 ответа

Да, вы можете это сделать - это называется обработкой "за вызов" Запросы. ServiceHost будет создавать новый экземпляр вашего класса обслуживания для каждого запроса, поступающего для обработки этого одного запроса.

Для этого вам необходимо установить свой класс обслуживания (тот, который реализует интерфейс службы) как «PerCall».

7
ответ дан 10 December 2019 в 00:41
поделиться

Нет, потому что вы бы никогда этого не сделали. Чего вы действительно пытаетесь достичь?

РЕДАКТИРОВАТЬ

На основании поступающей дополнительной информации я вот что думаю.

Если вам просто нужно «липкое состояние» для каждого запроса, вам следует использовать состояние в экземпляре и используйте InstanceContextMode.PerCall в соответствии с ответом marc_s.

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

Но вам не нужно заботиться о том, «какой поток». WCF обработает это с помощью пула потоков от вашего имени.

0
ответ дан 10 December 2019 в 00:41
поделиться

Зависит от того, что именно вы хотите, но следующее поведение службы решит эту проблему:

ServiceBehavior:
ConcurrencyMode=ConcurrencyMode.Multiple
InstanceContextMode=InstanceContextMode.Single

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

Также не забудьте изучить регулирование, чтобы знать о возможных проблемах с производительностью.

3
ответ дан 10 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: