C#如何计算我的AppDomain中的托管线程数?

C#如何计算我的AppDomain中的托管线程数?,c#,.net,multithreading,threadpool,C#,.net,Multithreading,Threadpool,有没有办法知道我使用了多少托管线程(包括线程池) 当我通过GetProcess获得非托管线程的数量时,我有一个疯狂的数字(一开始是21个)它不是这样工作的。托管程序中的任何线程都可以执行托管代码,包括最初作为非托管线程启动的代码。大多数情况下,主线程和任何线程池线程开始执行纯非托管代码。它通过Marshal.GetDelegateForFunctionPointer()提供的网关类型转换为托管代码 看到几十个(否则是非活动的)线程并不罕见。它们通常是线程池线程和COM服务器启动的线程。NET缺少

有没有办法知道我使用了多少托管线程(包括线程池)


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

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

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


您必须避免问这个问题。

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

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


有一个来自Microsoft的示例:

谢谢您让我知道。但是我想得到一个答案。如何找出在任何时候我的应用程序中创建了多少托管线程?这就是重点!我使用3d party API,他们不想透露细节,还可能使用线程池或其他软件等等……你只进入了悲伤五个阶段中的第二阶段。在第3阶段,你可能会考虑解释为什么计算线程对你很重要。我需要它来比较不同的版本和方法。最小化/优化线程数量,并与API开发人员交流信息。所以这个问题不是很重要。但CAS很重要。不管你喜不喜欢,我都要换一下!:-P