Количество потоков для одной и той же программы сообщается по-разному из разных источников

1

Почему System.Diagnostics.GetCurrentProcess().Threads.Count, диспетчер задач и отладчик Visual Studio все сообщают о разном количестве потоков?

Я нашел это: Почему количество потоков, сообщаемых WinDbg, диспетчером задач и VS Debugger, отличается?

И он указал, что отладчик выполняет некоторую форму фильтрации, но никогда не было ответа о том, что такое фильтр. Также была заметка об инвазивных и неинвазивных методах получения количества потоков и о том, как это может повлиять на сообщенную сумму диспетчером задач.

Я вижу, что System.Diagnostics.GetCurrentProcess().Threads.Count сообщает большее количество потоков, чем диспетчер задач, который сообщает большее количество потоков, чем Debugger.

Является System.Diagnostics.GetCurrentProcess().Threads.Count конечном счете является наиболее точным или есть что-то ошибочное или вводящее в заблуждение в том, что он сообщает? Также было бы неплохо узнать, какая фильтрация применяется отладчиком Visual Studio (и, похоже, диспетчер задач, хотя и другой фильтр).

  • 5
    Обратите внимание, что в зависимости от фактического выполнения число потоков может изменяться довольно быстро, поэтому, если два счетчика потоков не сэмплируют с одинаковой скоростью, они могут показывать разные числа.
  • 0
    Я установил точку останова для отладчика Visual Studio сразу после получения диагностического счета. Я не уверен, но я надеюсь, что отладчик и диагностика проверили бы количество потоков примерно в одно и то же время при таких обстоятельствах.
Показать ещё 1 комментарий
Теги:
multithreading
debugging
visual-studio-2010

1 ответ

1
Лучший ответ
  1. Одна вещь, которая может вызвать различия между этими подсчетами, - это частота дискретизации счетчиков.

    В зависимости от фактического исполнения количество потоков может изменяться довольно быстро, поэтому, если два счетчика потоков не будут сэмплироваться с одинаковой скоростью, они могут отображать разные числа.

  2. Я не знаю никакой фильтрации в visual Studio, но этот ответ: qaru.site/questions/363260/... имеет интересную находку: мертвые темы. Обратите внимание, что во время отладки Visual Studio приостанавливает процесс, поэтому потоки (особенно на уровне ОС) могут быть удалены, но все же присутствуют на управляемом уровне или наоборот.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню