调试期间的线程

时间:2014-01-16 23:29:36

标签: c# multithreading debugging

有人可以向我解释为什么在我的项目调试期间有这么多线程吗?

我启动我的控制台应用程序(.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个Worker Threads用于我的Parallel.For循环中的3次迭代,但是: 为什么一个线程被破坏,为什么没有名称线程,什么是RunParkingWindow,为什么一些线程ID会改变,例如。主线程,以及为什么在运行Parallel.For时会有2个额外的无名称线程?

2 个答案:

答案 0 :(得分:1)

你在VIsual工作室托管过程下运行。它旨在增强您的调试体验。您列出的许多主题都来自该流程。

请参阅:What is the purpose of the Visual Studio Hosting Process?

要停用此功能,请转到Project Properties&gt;在Debug标签中&gt;取消选中Enable the Visual Studio hosting Process

现在您的程序将作为自己的进程进行调试,您将看到正确的线程。基本应用程序将从主线程,终结器线程和几个线程池工作线程开始。工作线程将由CLR线程池创建并销毁,因为它认为合适。

答案 1 :(得分:0)

ID为[6772,8660,6728,8580,9332,9168]的线程是我认为的.Net框架线程。

无名线程可能是你的并行。从TPL线程池中拉出线程。 您可以更改调试选项以显示更多线程调试信息我忘记了我的头脑。

如果您的线程处理方式没有问题,您可能不需要花时间深入研究这个问题,但也许您只是在研究框架。

正如阿列克谢指出,您可以在“tools-&gt; options-&gt; debug-&gt;”中设置此信息“仅限我的代码”