2013-01-08 2 views
1

Comment puis-je obtenir le cpuload des threads en cours d'exécution de mon application.
Mon application fonctionne sur linux, mac NOT windows. J'ai mis à jour le mono vers la version 3.0.2.
Maintenant, je peux obtenir le fil de comptage correct de « Process.GetCurrentProcess().Threads » mais aucun objet ProcessThread est disponible pour lire le « TotalProcessorTime »C# mono get utilisation du processeur des threads

Que puis-je faire pour calculer le cpu-usage/fils de mon application en cours d'exécution? Puis-je obtenir le linux-process-id de mon thread en cours d'exécution? Si je peux, je peux lire la structure du répertoire proc, mais je ne trouve rien.

J'espère que quelqu'un peut m'aider.

Répondre

2

Apparemment, la propriété Process.Threads est seulement partially implemented at the moment:

// This'll return a correctly-sized array of empty ProcessThreads for now. 
int error; 
return new ProcessThreadCollection(new ProcessThread[GetProcessData (pid, 0, out error)]); 

Je ne sais pas quelle peine vous avez exécuté en obtenir le numéro de processus, ce code seems to work pour moi:

using System; 
using System.Diagnostics; 
using System.IO; 

class MainClass 
{ 
    static void Main(string[] args) 
    { 
     int pid = Process.GetCurrentProcess().Id; 
     DirectoryInfo taskDir = new DirectoryInfo(String.Format("/proc/{0}/task", pid)); 
     foreach(DirectoryInfo threadDir in taskDir.GetDirectories()) 
     { 
      int tid = Int32.Parse(threadDir.Name); 
      Console.WriteLine(tid); 
     } 
    } 
} 
+0

Oui cela est correct, mais je ne peut pas référencer l'ID de thread géré à l'ID de thread linux. – mjungwirth

+0

[MSDN says] (http://msdn.microsoft.com/en-us/library/system.threading.thread%28v=vs.110%29.aspx): "Un ThreadId du système d'exploitation n'a pas de relation fixe avec un thread géré, car un hôte non géré peut contrôler la relation entre les threads gérés et non gérés.Plus précisément, un hôte sophistiqué peut utiliser l'API CLR Hosting pour planifier plusieurs threads gérés sur le même thread du système d'exploitation ou pour déplacer un thread géré entre différents serveurs d'exploitation. threads du système. " Mono ne le fait peut-être pas en ce moment, mais je n'en dépendrais pas. – Jester

Questions connexes