2013-10-25 3 views
1

Мне было интересно, был ли разумный способ определения возможностей загрузки объекта Timers.Timer? Или, скорее, возможности потока. Кто-нибудь знает, есть ли проблемы с большим количеством (в сотнях) потоков с использованием класса Timer?Спиннинг с большим количеством таймеров. Токи тимеров

EDIT: Для работы мы будем разворачивать ряд потоков, которые будут выполнять проверку порога и давать точки на основе того, кто встречает порог. Он будет разворачивать поток на одного клиента и проверяться каждые 5 минут или около того. Это сервис, и он будет установлен на сервере, поэтому я использую Timers.Timer вместо Threading.Timer (так как я также слышал, что Timers.Timer более потокобезопасен, чем Threading.Timers). В настоящее время у меня будет только ~ 10 таймеров, так как это все, что мне нужно для обработки. Я прошу о возможной будущей нагрузке. Был также использует этот пост в качестве эталона, для которого таймера: System.Timers.Timer vs System.Threading.Timer

+3

Вы не должны крутить сотни нитей, независимо от того, как вы это делаете. Период. Когда вы это делаете, вы добавляете накладные расходы для каждого дополнительного потока, касающегося переключения контекста и давления памяти. –

+0

Есть Windows.Forms.Timer и System.Threading.Timer, выберите один :) Также, что будут делать эти потоки? Спиннинг сотен потоков только в некоторых случаях является логикой ... – Stormenet

+0

@Stormenet нет, OP указано в заголовке Timers.Timer :) – terrybozzio

ответ

3

Кто-нибудь знает, есть ли какие-либо проблемы с раскручивается большое количество (в сотнях) потоки, используя класс Timer?

Предполагается, что каждый таймер создаст частный поток. Однако это не так. Обратные вызовы таймера выполняются в пуле потоков .NET. Поэтому создание многих таймеров само по себе не является проблемой, но, очевидно, существуют ограничения на то, сколько параллельной работы может обрабатывать пул потоков. Это затронет вас, если все таймеры будут стрелять одновременно.

Корпорация Майкрософт предоставляет некоторую общую информацию о пуле потоков в статье The Managed Thread Pool.

+0

Вы правы, но op говорит об использовании Timers.Timer not threading.timer :) – terrybozzio

+0

@terrybozzio: класс 'System.Timers.Timer' реализован с использованием' System.Threading.Timer', поэтому независимо от того, какой таймер вы используете получить ту же основную реализацию. –

+0

не та же основная реализация, пожалуйста, посмотрите, http://msdn.microsoft.com/en-us/magazine/cc164015.aspx – terrybozzio

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