为什么这个简单的.NET控制台应用程序有这么多线程?

时间:2010-08-13 12:12:00

标签: c# .net multithreading

这个简单的程序以15个线程开始 - 根据计数。有时它会在一生中掉落一些,但它们会回来。

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

我期待这个过程只有一个帖子(我的直觉由this支持)

没有调试器,进程只有(!)4个线程。当然,任何CLR内容都会隐藏在我的进程中?

这有多重要?这个过程真的有那么多线程吗?为什么呢?

4 个答案:

答案 0 :(得分:35)

尝试在调试器外运行它(即按Ctrl + F5而不是F5)。你应该只看到三个线程 - 主线程,GC线程&终结者线程IIRC。您看到的其他线程是与调试器相关的线程。

答案 1 :(得分:5)

如果在没有附加调试器的情况下运行它,则线程明显减少。那些可能是终结者线程,以及其他管家CLR的东西。

答案 2 :(得分:5)

Project + Properties,Debugging,untick“启用Visual Studio托管过程”。我无法发现它在做什么。只要勾选“启用非托管代码调试”选项以试图查看这些线程,它们就不再启动了。没有线索。但我相信这对我们有利:)

答案 3 :(得分:4)

尝试在未连接调试器(Visual Studio)的情况下运行它(Ctrl + F5)。你会看到会有更少(可能是3个)线程。大多数线程都与调试器有关。