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

Mat*_*sen 33 .net c# multithreading

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

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

我期待的过程,只是有一个线程(和我的直觉是由备份这个)

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

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

Phi*_*ney 35

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

  • 即使我处于发布模式而不通过 VS 运行该进程,VS 托管进程也会激活吗?我仍然看到4个线程... (2认同)
  • 线程4可能是一个ThreadPool线程,用于需要完成的任何异步工作.但是只是猜测. (2认同)

Ken*_*art 5

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


Han*_*ant 5

Project + Properties,Debugging,untick"启用Visual Studio托管过程".我无法发现它在做什么.当我勾选"启用非托管代码调试"选项,试图让这些线程一眼,便不再上手.没有线索.但我相信这是为了我们的利益:)

  • 不,主机进程是CLR的自定义托管版本.主要用于安全目的. (2认同)