2012-10-13 105 views
20

所以,我有一個很簡單的控制檯應用程序:有多個線程?

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

我已經發布配置構建它。當我運行它並打開任務管理器時,我看到它 有4個線程。即使我沒有創建任何線程,爲什麼會發生這種情況?

這不可能是每個應用程序。我試過打開記事本,它只有1個線程。雖然它是一個本機應用程序,我的控制檯應用程序是託管。

任何想法?

+0

您總是至少有1個GC +主線程的線程。 – driis

回答

17

我想象你看到線程是:

  1. 主線程
  2. 的終結日。讀取
  3. In-process debugger helper thread
  4. 並行GC線程。

This post詳細介紹了一些特殊的CLR線程。

+0

+1,非常不錯的鏈接到博客文章 – sll

+0

謝謝你的鏈接。優秀的資源! – Aniket

6

這些是爲應用程序創建的.NET Framework線程,您可以使用Visual Studio 2010線程調試窗口查看哪些線程屬於該問題下的應用程序。

剛剛創建了一個基本的控制檯應用程序與空main方法,我們可以看到,8個線程創建:

enter image description here

在這裏看到關於CLR內螺紋有趣的討論:The CLR's internal threads

BTW,記事本不是.NET Framework應用程序

+0

我知道,所以不可能創建一個單線程.NET應用程序? – Aniket

+0

我相信沒有,因爲你沒有這種控制。NET框架的行爲只是想知道是否有人知道這樣做,我正在談論託管應用程序,不確定關於非託管 – sll

+0

我可以確認本機應用程序(C/C++)只有一個線程。剛試過了。 – Aniket

3

.NET Framework始終在程序開始時啓動一些線程:

  1. 你的主線程(顯然)
  2. 垃圾收集線程
  3. JIT線程。
1

正常COM應用程序和託管應用程序之間有一個基本區別。這是垃圾收集。

每個進程都有一個與其關聯的終結器線程,以便應用程序中的終結器僅在該線程上運行。

所以主題是: 1.主線程(應用程序創造) 2.終結器線程(由垃圾收集器使用 3. JIT線程(用於飛JIT代碼)

的。其他線程可以SysEvents等