2010-04-30 2 views
6

У меня есть программа, которая вызывает C++-библиотеку. Процессы программы имеют большое количество потоков (50-60). Большинство из них, похоже, созданы на C++, и я подозреваю, что большинство из них приостановлено/ждет.Как получить активное количество потоков?

Как узнать, сколько из этих потоков активно в данный момент времени?

+0

http://msdn.microsoft.com/library/system.diagnostics.process.threads(v=VS.90).aspx – Andrey

ответ

4

Вы можете использовать Process Explorer для проверки потоков. Он расскажет вам в реальном времени, сколько CPU потребляет, и может дать вам отдельные трассировки стека, которые укажут, на что они заблокированы.

12

Чтобы определить количество активных потоков, необходимо проверить свойство ThreadState каждого потока.

((IEnumerable)System.Diagnostics.Process.GetCurrentProcess().Threads) 
    .OfType<System.Diagnostics.ProcessThread>() 
    .Where(t => t.ThreadState == System.Diagnostics.ThreadState.Running) 
    .Count(); 
+0

Похоже, что вам может понадобиться, чтобы проверить 'using's. 'IEnumerable' требует' using System.Collections', который не всегда включается по умолчанию. 'OfType ' возвращает 'IEnumerable ' из 'IEnumerable'. Поэтому вам не понадобится, если вы начинаете с 'IEnumerable ', как вы. На первый взгляд, ваш код выглядит так, как будто он работает одинаково. – Nathan

Смежные вопросы