20

所以我有一个足够简单的控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        Console.ReadKey();
    }
}

我已经使用发布配置构建了它。当我运行它并打开任务管理器时,我看到它有 4 个线程。即使我没有创建任何线程,为什么会发生这种情况?

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

有任何想法吗?

4

4 回答 4

17

我想你看到的线程是:

  1. 主线。
  2. 终结器线程
  3. 进程内调试器帮助线程
  4. 并发 GC 线程。

这篇文章详细介绍了一些特殊的 CLR 线程。

于 2012-10-13T22:01:09.797 回答
6

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

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

在此处输入图像描述

在此处查看有关 CLR 内部线程的有趣讨论:CLR 的内部线程

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

于 2012-10-13T21:42:02.337 回答
3

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

  1. 你的主线程(显然)
  2. 垃圾回收线程
  3. JIT 线程。
于 2012-10-13T21:51:46.700 回答
1

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

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

所以线程是: 1. 主线程(您的应用程序已创建) 2. 终结器线程(由垃圾收集器使用。3. JIT 线程(用于即时 JIT 代码)

其他线程可以是 SysEvents 等。

于 2012-10-13T21:53:21.393 回答