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)
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.
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
Tags und Links .net c# multithreading threadpool