2013-01-08 60 views
1

如何獲得我的應用程序的運行線程的cpuload。
我的應用程序運行在linux,mac not windows。c#單線程獲取線程的CPU使用情況

我更新單聲道版本3.0.2。
現在我能得到的「Process.GetCurrentProcess().Threads」正確的線程數,但沒有ProcessThread對象是提供給閱讀「TotalProcessorTime

我能做些什麼來計算CPU使用率我運行的應用程序/線程?

我可以得到正在運行的線程的linux-process-id嗎?如果可以,我可以讀取proc目錄結構,但我找不到任何方法。

我希望有人能幫助我。

回答

2

顯然,Process.Threads屬性僅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)]); 

不知道什麼麻煩你爲我碰上得到的進程ID,此代碼seems to work

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 says](http://msdn.microsoft.com/en-us/library/system.threading.thread%28v=vs.110%29.aspx):「操作系統ThreadId與因爲非託管主機可以控制託管線程和非託管線程之間的關係,具體來說,一個複雜的主機可以使用CLR託管API來針對相同的操作系統線程調度多個託管線程,或者在不同的操作之間移動託管線程系統線程「。單聲道目前可能不會那樣做,但我不會依賴它。 – Jester