Почему System.Diagnostics.GetCurrentProcess().Threads.Count
, диспетчер задач и отладчик Visual Studio все сообщают о разном количестве потоков?
Я нашел это: Почему количество потоков, сообщаемых WinDbg, диспетчером задач и VS Debugger, отличается?
И он указал, что отладчик выполняет некоторую форму фильтрации, но никогда не было ответа о том, что такое фильтр. Также была заметка об инвазивных и неинвазивных методах получения количества потоков и о том, как это может повлиять на сообщенную сумму диспетчером задач.
Я вижу, что System.Diagnostics.GetCurrentProcess().Threads.Count
сообщает большее количество потоков, чем диспетчер задач, который сообщает большее количество потоков, чем Debugger.
Является System.Diagnostics.GetCurrentProcess().Threads.Count
конечном счете является наиболее точным или есть что-то ошибочное или вводящее в заблуждение в том, что он сообщает? Также было бы неплохо узнать, какая фильтрация применяется отладчиком Visual Studio (и, похоже, диспетчер задач, хотя и другой фильтр).
Одна вещь, которая может вызвать различия между этими подсчетами, - это частота дискретизации счетчиков.
В зависимости от фактического исполнения количество потоков может изменяться довольно быстро, поэтому, если два счетчика потоков не будут сэмплироваться с одинаковой скоростью, они могут отображать разные числа.
Я не знаю никакой фильтрации в visual Studio, но этот ответ: qaru.site/questions/363260/... имеет интересную находку: мертвые темы. Обратите внимание, что во время отладки Visual Studio приостанавливает процесс, поэтому потоки (особенно на уровне ОС) могут быть удалены, но все же присутствуют на управляемом уровне или наоборот.