¿Por qué esta simple aplicación de consola .NET tiene tantos hilos?

Este sencillo progtwig comienza con 15 hilos, según el recuento. A veces, durante su vida, se reducen algunas, pero vuelven.

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

Esperaba que el proceso solo tuviera un hilo (y mi intuición fue respaldada por esto )

Sin el depurador, el proceso tiene solo (!) 4 hilos. Seguramente cualquier material de CLR estaría oculto de mi proceso?

¿Qué cuenta es esto? ¿El proceso realmente tiene tantos hilos? ¿Por qué?

Intente ejecutarlo fuera del depurador (es decir, presione Ctrl + F5 en lugar de F5). Solo debe ver tres hilos: el hilo principal, el hilo del GC y el hilo del finalizador IIRC. Los otros subprocesos que ve son subprocesos relacionados con el depurador.

Project + Properties, Debugging, desmarque “Habilitar el proceso de alojamiento de Visual Studio”. No puedo descubrir lo que está haciendo. Tan pronto como selecciono la opción “Habilitar la depuración del código no administrado” para intentar echar un vistazo a estos hilos, ya no se inician. Ninguna pista. Pero estoy seguro de que es para nuestro beneficio 🙂

Si lo ejecuta sin un depurador conectado, hay muchos menos hilos. Y esos serían presumiblemente el hilo finalizador, y otras cosas CLR house-keeping.

Intente ejecutarlo sin el depurador (Visual Studio) conectado (Ctrl + F5). Verás que habrá menos hilos (probablemente 3). La mayoría de esos hilos tienen que ver con el depurador.