2013-01-08 3 views
1

내 응용 프로그램의 실행 스레드의 cpuload를 어떻게 얻을 수 있습니까?
내 응용 프로그램이 리눅스에서 실행되고, mac가 아닌 윈도우에서 실행됩니다.C# 모노 스레드 CPU 사용량을 얻으십시오

모노를 버전 3.0.2로 업데이트합니다.
지금 나는 "Process.GetCurrentProcess().Threads"의 올바른 스레드 수를 얻을 수 있지만 ProcessThread 객체는 읽어 볼 수없는 "TotalProcessorTime"

i는 CPU 사용량 내 실행중인 응용 프로그램의/스레드를 계산하기 위해 무엇을 할 수 있는가?

실행중인 스레드의 linux-process-id를 얻을 수 있습니까? 내가 할 수 있다면, 내가 proc 디렉토리 구조를 읽을 수 있지만 어떤 방법을 찾을 수 없습니다.

누군가가 나를 도울 수 있기를 바랍니다.

답변

2

분명히 Process.Threads 속성은 partially implemented at the moment입니다 : 당신이 나를 위해, 프로세스 ID를 얻기에이 코드 seems to work를 실행 한 어떤 문제가 있는지

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

하지 :

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

예이 정확하지만 난 managed-thread-id를 linux-thread-id로 참조 할 수 없습니다. – mjungwirth

+0

[MSDN] (http://msdn.microsoft.com/en-us/library/system.threading.thread%28v=vs.110%29.aspx) : "운영 체제 ThreadId에는 다음과 같은 고정 된 관계가 없습니다. 관리되지 않는 호스트는 관리되는 스레드와 관리되지 않는 스레드 사이의 관계를 제어 할 수 있으므로 정교한 호스트는 CLR Hosting API를 사용하여 동일한 운영 체제 스레드에 대해 많은 관리되는 스레드를 예약하거나 다른 운영 체제간에 관리되는 스레드를 이동시킬 수 있습니다 시스템 스레드. " 모노는 현재 그렇게하지 않을 수도 있지만, 나는 그것에 의존하지 않을 것입니다. – Jester

관련 문제