2010-04-30 11 views
6

Ho un programma che chiama una libreria C++. I processi del programma hanno un numero elevato di thread (50 - 60). Molti di essi sembrano essere creati in C++ e sospetto che molti siano sospesi/in attesa.Come ottenere il conteggio thread attivo?

Come faccio a sapere quanti di questi thread sono attivi in ​​un dato momento?

+0

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

risposta

4

È possibile utilizzare Process Explorer per ispezionare i thread. Ti dirà in tempo reale quanto CPU consuma e può darti tracce di stack individuali, che indicheranno su cosa sono bloccate.

12

Per determinare effettivamente il conteggio di thread attivi, è necessario controllare la proprietà ThreadState di ciascun thread.

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

Sembra che potrebbe essere necessario per controllare i 'using's. 'IEnumerable' richiede' using System.Collections', che non è sempre incluso di default. 'OfType ' restituisce 'IEnumerable ' da 'IEnumerable'. Quindi non ne avresti bisogno se stai iniziando con 'IEnumerable ' come te. A prima vista, il tuo codice sembra funzionare allo stesso modo. – Nathan

Problemi correlati