2010-08-13 12 views
30

Este sencillo programa comienza con 15 hilos, según el recuento. A veces, durante su vida, se reducen algunas, pero vuelven.¿Por qué esta simple aplicación de consola .NET tiene tantos subprocesos?

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

que estaba esperando el proceso de tener sólo un hilo (y mi intuición fue respaldada por this)

Sin el depurador, el proceso tiene solamente (!) 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é?

+0

¿Cuántas tienes? –

+0

solo por curiosidad. ¿A quién voto aquí? todo el mundo tiene la misma respuesta: D – obelix

+1

@obelix: si todos merecen un voto positivo, puedes votarlos todos. Su tipo de pregunta debe hacerse en MSO. – Richard

Respuesta

35

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 &, el hilo del finalizador IIRC. Los otros subprocesos que ve son subprocesos relacionados con el depurador.

+0

Sí, el hilo principal, el GC y el finalizador son exactamente lo que verá. Sin embargo, debe A) ejecutar fuera del depurador y B) desactivar el proceso de alojamiento de Visual Studio que agrega un hilo o dos. – Tergiver

+0

¿tiene un enlace a un artículo msdn? –

+1

¿El proceso de alojamiento de VS está activado incluso si estoy en modo de lanzamiento sin ejecutar el proceso a través de VS? Todavía veo 4 hilos ... –

5

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.

4

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.

5

Project + Properties, Depuración, 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 :)

+1

Creo que el proceso de alojamiento le da al depurador rayas más rápidas, o algo así. –

+1

Creo que el proceso de alojamiento fue diseñado para proporcionar tiempos de inicio de depuración más rápidos: cuando depura, los ensamblajes correspondientes se cargan en el proceso vshost, en lugar de tener que seguir creando/destruyendo procesos nuevos. –

+2

Nah, el proceso de alojamiento es una versión alojada personalizada del CLR. Sobre todo por motivos de seguridad. –

Cuestiones relacionadas