C#如何统计AppDomain中的托管线程?

时间:2010-06-18 10:25:51

标签: c# .net multithreading threadpool

有没有办法找出我使用的托管线程数(包括ThreadPool)?

当我通过GetProcess计算非托管线程时,我有一个疯狂的数字(一开始就是21)

2 个答案:

答案 0 :(得分:2)

这不是它的工作方式。托管程序中的任何线程都可以执行托管代码,包括最初作为非托管线程启动的托管代码。大多数情况下,主线程和任何线程池线程开始执行纯粹的非托管代码。它通过Marshal.GetDelegateForFunctionPointer()提供的网关类型进入托管代码。

看到几十个(否则是非活动的)线程并不罕见。它们通常是线程池线程和由COM服务器启动的线程。 .NET缺少在这些线程上使用Thread.ManagedThreadId所需的管道。这是故意的,逻辑.NET线程不必是物理操作系统线程。虽然目前没有主机,但事实并非如此。

你必须避免提出问题。

答案 1 :(得分:1)

我没有检查是否可以使用调试接口,但由于VS在其调试器中显示托管线程,因此您也应该可以在其中使用它们。

在.NET中,编写调试器比您预期的要容易得多。实现调试器基本上包括实现ICorDebug接口。

Microsoft提供了一个示例:Managed Debugger Sample