Если вы попытаетесь опубликовать пример кода или резюме, ваша реализация отправки сообщений станет хорошим кандидатом.
Во-первых, чисто общие советы.
Это хорошее время, чтобы достать профилировщик. Такое предположение заманчиво и часто является хорошим умственным упражнением, но большую часть времени программисты ошибаются в том, что, по их мнению, замедляет работу их программного обеспечения . Профилировщик скажет вам, например, если ваша программа тратит 90% своего времени выполнения в одном методе.
Во-вторых, умозрительное предположение.
Звучит так, будто ваша команда сообщений запускается по таймеру. Убедитесь, что у вас нет проблем с повторным входом - например, если ваш цикл отправки сообщений занимает более 500 мс (и вместе с созданием нового потока и множеством непредсказуемых сетевых вызовов с задержкой это вполне может сделать это), и у вас есть все операции в блокировке, тогда таймер будет продолжать порождать потоки пула потоков, которые сидят в этой блокировке, ожидая завершения предыдущей операции - и имеется конечное число доступных потоков пула потоков. Чтобы проверить, является ли это проблемой, вам даже не нужен профилировщик, когда задержка становится плохой, приостановите отладчик и проверьте свой список текущих выполняющихся потоков.
Если это так, подумайте о том, чтобы сделать что-то еще, например, иметь один поток, который работает в бесконечном цикле, используя ручку ожидания в качестве механизма блокировки и таймер, который устанавливает ручку ожидания каждые 500 мс.
Но вам будет гораздо легче помочь, если вы разместите некоторые фрагменты кода и запустите профилировщик (Ants или DotTrace оба отлично работают).