2013-04-18 4 views
0

Итак, я перехожу к веб-сервису, который требует от меня вызова метода keep-alive для каждого события, которое я подписываю. Это может быть до 400 событий в любой момент времени.Почему .NET ThreadPool отстает?

В настоящее время я использую System.Timers.Timer, который не запускает интервал. Проблема в том, что это, кажется, съедает мой ThreadPool, потому что если я попытаюсь запустить что-то с помощью ThreadPool.QueueWorkersItem(), он может занять до 20 секунд для запуска после того, как он поставлен в очередь.

Любая идея, как запускать мои вызовы keep-alive, бегущие без поедания потока?

BR Tomas

+3

Вы выполняете метод «держать живым» в новом потоке каждый раз? почему не только один посвященный этому? – Fredrik

ответ

1

Это зависит от того, сколько из этих событий у вас есть, как часто вам нужно вызвать метод сохранить живой, и как долго это берет, чтобы сделать этот призыв. ThreadPool.QueueUserWorkItem собирается queue метод, который должен быть выполнен. Если все потоки threadpool заняты, ваш рабочий элемент должен будет дождаться освобождения потока. И для всех остальных предметов, которые были поставлены перед ней.

Возможно, вы должны сделать так, как предлагал комментатор, и иметь отдельный выделенный поток, который постоянно выполняет обновления, возможно, делая асинхронные вызовы.

Смежные вопросы