C # Wie man verwaltete Threads in meiner AppDomain zählt?

8

Gibt es eine Möglichkeit, herauszufinden, wie viele verwaltete Threads ich verwende (einschließlich ThreadPool)?

Wenn ich über GetProcess nicht verwaltete Threads zähle, habe ich eine wahnsinnige Zahl davon (21 ganz am Anfang)

    
Boppity Bop 18.06.2010, 10:25
quelle

2 Antworten

2

So funktioniert das nicht. Jeder Thread in einem verwalteten Programm kann verwalteten Code ausführen, einschließlich solcher, die ursprünglich als nicht verwalteter Thread gestartet wurden. Was am meisten ist, der Hauptthread und jeder threadpool thread beginnt mit der Ausführung von rein nicht verwaltetem Code. Es tappt in verwalteten Code über die Art von Gateway von Marshal.GetDelegateForFunctionPointer ().

Dutzende (ansonsten inaktive) Threads sind nicht ungewöhnlich. In der Regel handelt es sich um Threadpool-Threads und Threads, die von COM-Servern gestartet werden. .NET fehlt die Installation, die Sie Thread.ManagedThreadId für diese Threads verwenden müssen. Das ist beabsichtigt, ein logischer .NET-Thread muss kein physischer Betriebssystem-Thread sein. Obwohl es derzeit keinen Host gibt, wo das nicht der Fall ist.

Sie müssen vermeiden, die Frage stellen zu müssen.

    
Hans Passant 18.06.2010, 13:01
quelle
1

Ich habe nicht überprüft, ob es möglich ist, die Debugging-Interfaces zu verwenden, aber da VS verwaltete Threads in seinem Debugger anzeigt, sollten Sie in der Lage sein, sie auch in Ihrem zu bekommen.

In .NET ist das Schreiben eines Debuggers viel einfacher, als Sie vielleicht erwarten. Die Implementierung des Debuggers besteht im Wesentlichen darin, die ICorDebug Schnittstelle zu implementieren.

Es gibt ein Beispiel von Microsoft: Managed Debugger Probe

    
Marek 21.06.2010 07:03
quelle

Tags und Links