Why does this simple .NET console app have so many threads?
This simple program starts with 15 threads - according to the count. Sometimes during its lifetime it drops a few, but they come back.
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine(Process.GetCurrentProcess().Threads.Count);
Thread.Sleep(500);
}
}
}
I was expecting the process to just have one thread (and my intuition was backed up by this)
Without the debugger, the process has only (!) 4 threads. Surely any CLR stuff would be hidden from my process开发者_如何转开发?
What count is this? Does the process really have that many threads? Why?
Try running it outside the debugger (i.e. press Ctrl+F5 instead of F5). You should only see three threads - the main thread, the GC thread & the finalizer thread IIRC. The other threads you see are debugger-related threads.
Project + Properties, Debugging, untick "Enable the Visual Studio hosting process". I can't discover what it is doing. As soon as I tick the "Enabled unmanaged code debugging" option to try to get a peek at these threads, they no longer get started. No clue. But I'm sure it's for our benefit :)
If you run it without a debugger attached, there are significantly fewer threads. And those would presumably be the finalizer thread, and other house-keeping CLR stuff.
Try running it without the debugger (Visual Studio) attached (Ctrl+F5). You'll see that there will be less (probably 3) threads. Most of those threads have to do with the debugger.
精彩评论