2014-01-16 33 views
3

有人可以向我解釋爲什麼在我的項目調試過程中有太多的線程?調試過程中的線程

我開始我的控制檯應用程序(.NET 4.5),我可以看到有以下主題:

[8064][Thread Destroyed] 
[5528]<No Name> 
[9048]<No Name> 
[1760]<No Name> 
[6836]vshost.RunParkingWindow 
[10200].NET SystemEvents 
[9692]Main Thread 

當我跑我的Parallel.For有3次迭代,我得到了以下主題:

[0]Thread Ended 
[10140]<No Name> 
[4464]<No Name> 
[5332]<No Name> 
[6772]vshost.RunParkingWindow 
[8660].NET SystemEvents 
[6728]Main Thread 
[8580]Worker Thread 
[9332]Worker Thread 
[9168]Worker Thread 
[1336]<No Name> 
[9464]<No Name> 

我承擔了3個工作線程是在我的Parallel.For循環的3次迭代,但: 爲什麼一個線程被破壞,爲什麼沒有名字線程,什麼是RunParkingWindow,爲什麼有些線程ID改變如。主線程,爲什麼當我運行Parallel.For時有2個額外的無名線程?

+2

什麼阻止你看這些線程的調用棧知道他們在做什麼? (可能需要取消選中「工具 - >選項 - >調試 - >」我的代碼只有) –

+0

我已經編輯過你的標題,請參閱,「[應該問題包括」標籤「在他們的標題? .stackexchange.com/questions/19190 /)「,其中共識是」不,他們不應該「。 –

回答

1

你下一個Visual Studio的託管進程中運行它是爲了提高你的調試體驗。許多已上市的線程都從這個過程

參見:What is the purpose of the Visual Studio Hosting Process?

要禁用此功能 - 轉到Project Properties>在Debug標籤>取消Enable the Visual Studio hosting Process

現在你的程序將作爲自己的進程進行調試,你會看到正確的線程。一個基本的應用程序將從一個主線程,一個終結器線程和一對線程池工作線程開始。工作線程將被CLR線程池創建並銷燬,只要它認爲合適。

0

ID爲[6772,8660,6728,8580,9332,9168]的線程是我相信的.Net框架線程。

無名線程可能是您的parallel.for從TPL線程池拉線程。 你可以改變你的調試選項來顯示更多的線程調試信息,我忘記了我的頭頂。

如果你對你的線程處理方式沒有問題,你可能不需要花時間去研究這個問題,但也許你只是在研究框架。

正如阿列克謝指出,可以設置在這個信息「工具 - >選項 - >調試 - >」我的代碼只有」

+0

我認爲3」工作線程「線程來自parallel.for? 我知道你不需要知道這個東西,但我只是感興趣。 –