Проблемы производительности Thread.Sleep (Timeout.Infinite) - PullRequest
1 голос
/ 05 октября 2010

Основной путь выполнения (основной поток) будет разделен на два пути выполнения (два новых потока в разных заданиях), но основной поток больше не нужен.Я могу назначить одну из задач основному потоку и сохранить один поток (одну задачу по основному потоку, а другую - по новому), но мне было интересно, что основной поток помещается в бесконечный сон Thread.Sleep(Timeout.Infinite) - это хороший подход или нет.Мой класс будет создаваться много раз, и если поток в бесконечном сне получает ресурсы от ОС, это плохая новость для меня.

Ответы [ 2 ]

1 голос
/ 05 октября 2010

Каждый создаваемый вами поток занимает место в стеке. В Windows это по умолчанию 1 МБ. Существуют и другие внутренние структуры данных служебного хранения, которые операционная система использует для отслеживания потоков, которые также занимают немного памяти, но стек 1 МБ определенно станет самым большим потребителем ресурсов.

Сказав, что, если мы говорим только о 2 против 3 потоков, то разница довольно мала. Если бы это было 200 против 300, то вам может быть о чем беспокоиться. Но если вы порождаете много потоков, вам лучше использовать некоторый пул потоков (например, , встроенный в .NET Framework ), а не порождать отдельные потоки в любом случае.

0 голосов
/ 05 октября 2010

Все потоки связывают ресурсы, независимо от того, спят они или нет.

...