Вставка объекта в отсортированный список берет O(n)
время, не O(log n)
время. Необходимо найти, что место помещает его, беря O(log n)
время. Но тогда необходимо сместиться по всем элементам - взятие O(n)
время. Так вставка при поддержании отсортированного мыса O(n ^ 2)
, где как вставка их всех и затем сортировка O(n log n)
.
В зависимости от Вашей реализации вида, можно стать еще лучше, чем O(n log n)
, если количество вставок намного меньше, чем размер списка. Но если это так, это не имеет значения так или иначе.
Также - вставка все и решение для вида, если количество вставок является большим, иначе оно, вероятно, не будет иметь значения.
Да, вы можете это сделать - это называется обработкой "за вызов" Запросы. ServiceHost будет создавать новый экземпляр вашего класса обслуживания для каждого запроса, поступающего для обработки этого одного запроса.
Для этого вам необходимо установить свой класс обслуживания (тот, который реализует интерфейс службы) как «PerCall».
Нет, потому что вы бы никогда этого не сделали. Чего вы действительно пытаетесь достичь?
РЕДАКТИРОВАТЬ
На основании поступающей дополнительной информации я вот что думаю.
Если вам просто нужно «липкое состояние» для каждого запроса, вам следует использовать состояние в экземпляре и используйте InstanceContextMode.PerCall в соответствии с ответом marc_s.
Если вам нужно, чтобы какое-то состояние находилось в локальном хранилище потока для вашего вызова, вы можете рассмотреть возможность использования ICallContextInitializer в качестве способа маршалинга состояния на поток, который WCF выбирает для вызова вашего метода (и очищает состояние потока после завершения вызова).
Но вам не нужно заботиться о том, «какой поток». WCF обработает это с помощью пула потоков от вашего имени.
Зависит от того, что именно вы хотите, но следующее поведение службы решит эту проблему:
ServiceBehavior:
ConcurrencyMode=ConcurrencyMode.Multiple
InstanceContextMode=InstanceContextMode.Single
Ваш класс будет одноэлементным, но все вызовы методов будут выполняться в отдельном потоке. Если вам нужна синхронизация, вы должны сделать это вручную.
Также не забудьте изучить регулирование, чтобы знать о возможных проблемах с производительностью.