Per un tipo di funzione "informazioni di registro per supporto" mi piacerebbe enumerare e scaricare informazioni sui thread attivi.Ottenere l'elenco dei thread gestiti attualmente attivi in .NET?
Sono ben consapevole del fatto che le condizioni di gara possono rendere queste informazioni semi-inaccurate, ma mi piacerebbe provare a ottenere il miglior risultato possibile, anche se non è preciso al 100%.
Ho esaminato Process.Threads, ma restituisce oggetti ProcessThread, mi piacerebbe avere una collezione di oggetti Thread, in modo che possa registrare il loro nome e se siano thread in background o meno.
Esiste una tale raccolta disponibile, anche se è solo un'istantanea dei thread attivi quando la chiamo?
ie.
Thread[] activeThreads = ??
nota, per essere chiari, io non chiedendo Process.Threads, questa collezione mi dà un sacco, ma non tutti di ciò che voglio. Voglio sapere per quanto tempo vengono utilizzati thread specifici nella nostra applicazione (il che significa che dovrò cercare di connettere i due tipi di oggetti in un secondo momento, ma i nomi sono più importanti della CPU per cominciare.)
Sono 'System.Diagnostics.ProcessThreads' direttamente associabili a' System.Threading.Threads'? Il primo è un thread del sistema operativo, in cui quest'ultimo è un thread gestito. –
No, non lo sono. –
Quali informazioni aggiuntive della classe Thread necessarie non sono presenti nella classe ProcessThread? Un ThreadId del sistema operativo non ha una relazione fissa con un thread gestito, poiché un host non gestito può controllare la relazione tra thread gestiti e non gestiti. In particolare, un host sofisticato può utilizzare l'API di hosting CLR per pianificare molti thread gestiti sullo stesso thread del sistema operativo o per spostare un thread gestito tra diversi thread del sistema operativo. – serhio