Почему у этого простого консольного приложения .NET столько потоков?

Эта простая программа начинается с 15 потоков - согласно счету. Иногда в течение своей жизни он выпадает несколько, но они возвращаются.

class Program
 {
     static void Main(string[] args)
     {
         while (true)
         {
             Console.WriteLine(Process.GetCurrentProcess().Threads.Count);
             Thread.Sleep(500);
         }
     }
 }

Я ожидал, что процесс будет иметь только один поток (и моя интуиция была подкреплена this)

Без отладчика процесс имеет только (!) 4 потока. Наверняка любой материал CLR будет скрыт от моего процесса?

Что это такое? У процесса действительно есть много потоков? Почему?

Ответ 1

Попробуйте запустить его вне отладчика (т.е. нажмите Ctrl + F5 вместо F5). Вы должны видеть только три потока - основной поток, поток GC и поток финализатора IIRC. Другие потоки, которые вы видите, являются связанными с отладчиком потоками.

Ответ 2

Если вы запустили его без прикрепленного отладчика, тем меньше потоков. И это, по-видимому, будет финализатором нити и другими материалами CLR для домашнего хозяйства.

Ответ 3

Project + Properties, Debugging, untick "Включить хостинг Visual Studio". Я не могу понять, что он делает. Как только я поставлю галочку в опции "Включенный неуправляемый отладчик кода", чтобы попытаться заглянуть в эти потоки, они больше не запускаются. Нет подсказки. Но я уверен, что это для нашей пользы:)

Ответ 4

Попробуйте запустить его без добавления отладчика (Visual Studio) (Ctrl + F5). Вы увидите, что будет меньше (возможно, 3) потоков. Большинство из этих потоков связаны с отладчиком.