C # Как считать управляемые потоки в моем AppDomain? - PullRequest
9 голосов
/ 18 июня 2010

Есть ли способ узнать, сколько управляемых потоков я использую (включая ThreadPool)?

Когда я получаю количество неуправляемых потоков через GetProcess, у меня есть его безумное число (21 в самом начале)

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

Это не так, как это работает.Любой поток в управляемой программе может выполнять управляемый код, включая те, которые изначально были запущены как неуправляемый поток.Что большинство из них, основной поток и любой поток пула потоков начинает жизнь, выполняя чисто неуправляемый код.Он превращается в управляемый код, хотя тип шлюза, предоставляемый Marshal.GetDelegateForFunctionPointer ().

Просмотр десятков (в противном случае неактивных) потоков не является необычнымОбычно это потоки потоков и потоки, запускаемые COM-серверами.В .NET отсутствует сантехника, которую вам нужно было бы использовать Thread.ManagedThreadId в этих потоках.Это намеренно, логический поток .NET не обязательно должен быть физическим потоком операционной системы.Хотя в настоящее время нет хоста, где это не так.

Вам не придется задавать вопрос.

1 голос
/ 21 июня 2010

Я не проверял, возможно ли использование интерфейсов отладки, но, поскольку VS отображает управляемые потоки в своем отладчике, вы также можете получить их в своем.

В .NET написание отладчика намного проще, чем вы можете ожидать. Реализация отладчика в основном состоит из реализации интерфейса ICorDebug.

Есть пример от Microsoft: Образец управляемого отладчика

...