C# 释放多个线程?

C# 释放多个线程?,c#,multithreading,C#,Multithreading,因此,我有一个足够简单的控制台应用程序: class Program { static void Main(string[] args) { Console.ReadKey(); } } 我用发布配置构建了它。当我运行它并打开TaskManager时,我看到了它 有4个线程。即使我没有创建任何线程,为什么会发生这种情况 这不可能是每个应用程序都需要的。我试着打开记事本,它只有一个线程。虽然它是本机应用程序,并且我的控制台应用程序是托管的 有什么想法吗?这

因此,我有一个足够简单的控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        Console.ReadKey();
    }
}
我用发布配置构建了它。当我运行它并打开TaskManager时,我看到了它 有4个线程。即使我没有创建任何线程,为什么会发生这种情况

这不可能是每个应用程序都需要的。我试着打开记事本,它只有一个线程。虽然它是本机应用程序,并且我的控制台应用程序是托管的


有什么想法吗?

这些是为应用程序创建的.NET Framework线程,您可以使用Visual Studio 2010线程调试窗口查看哪些线程属于问题下的应用程序

刚刚创建了一个带有空main方法的基本控制台应用程序,我们可以看到创建了8个线程:

请参见此处有关CLR内部线程的有趣讨论:


顺便说一句,记事本不是.NET Framework应用程序。

在程序开始时,.NET Framework总是启动一些线程:

  • 你的主线(显然)
  • 垃圾收集线程
  • JIT线程

  • 普通COM应用程序和托管应用程序之间有一个基本区别。这是垃圾收集

    每个进程都有一个与之关联的终结器线程,因此应用程序中的终结器仅在该线程上运行

    因此,线程是: 1.主线程(应用程序已创建) 2.终结器线程(由垃圾收集器使用)。 3.JIT线程(用于动态JIT代码)


    其他线程可以是SysEvents等。

    我想您看到的线程是:

  • 主线
  • 终结器线程
  • 并发GC线程

  • 详细介绍了一些特殊的CLR线程。

    我知道,所以不可能创建单线程的.NET应用程序?我相信没有,因为您对.NET Framework行为没有这样的控制,只是想知道是否有人知道如何实现这一点,我指的是托管应用程序,不确定非托管应用程序我可以确认本机应用程序(C/C++)只有一个线程。只是尝试一下。你总是有至少一个线程的GC+你的主线程。感谢你的链接。优秀的资源!