У меня есть служба WCF net.tcp, размещенная с помощью встроенного ServiceHost, и при выполнении некоторых стресс-тестов я получаю странное поведение. В первый раз, когда я отправляю кучу запросов, от 5 до 10 запросов отвечают быстро, а остальные возвращаются с интервалом около 2 секунд. Во второй раз, когда я отправляю запросы, 10 - 20 возвращаются быстро и отдыхают с интервалом в 2 секунды.
Вышеизложенное повторяется до тех пор, пока я не смогу быстро получить более 100 запросов, но если я подожду минуту или около того, использование службы памяти снизится, и запросы вернутся к 5-10, возвращаясь быстро.
Служба, которую я тестирую, имеет небольшую задержку, поэтому я могу получить много открытых соединений одновременно, если эта задержка будет удалена, запросы будут возвращаться так быстро, что у меня будет, возможно, 2-5 открытых соединений одновременно. Эта задержка предназначена для имитации соединений с БД и других исходящих вещей.
По поведению похоже, что ServiceHost выделяет что-то, потоки, экземпляры классов, но я не могу понять, что это такое.
У меня мог бы быть таймер в клиенте, который вызывает службу, чтобы она работала, но это кажется плохим решением.
Если у меня высокая постоянная нагрузка на службу, она будет быстро обрабатывать все запросы, но если у меня будет период низкой активности, а затем в сервисе будет происходить всплеск соединений.
Полагаю, мой вопрос в том, ЧТО это - распределение, выделяемое при высокой нагрузке службы WCF, и КАК я могу настроить службу для предварительного распределения большего количества выделенных объектов.
EDIT:
Я провел еще какое-то тестирование и, глядя на процесс TaskMgr, вижу, что когда сервисный хост «отдыхает», открыто 10 потоков, но когда я начинаю отправлять запросы, счетчик потоков увеличивается. Пока счетчик потоков высок, сервис-хост может быстро обрабатывать входящие запросы, но если я приостанавливаю отправку запросов, открытый счетчик потоков уменьшается, и последующие запросы начинают обрабатываться дольше.
Теперь, как я могу сказать серверу-хосту держать открытыми несколько потоков? Или больше 10-12, которые он хранит по умолчанию?