2012-08-22 35 views
-2

我有一個問題:我的表演節目總是顯示0%的CPU使用率...性能計數器,顯示出0%

我已經加入1個標籤稱爲Text值CPU:

下面是代碼:

public partial class Form1 : Form 
{ 
    PerformanceCounter cpu = new PerformanceCounter ("Processor", "% Processor Time", "_Total"); 

    public Form1() 
    { 
     InitializeComponent(); 
     //string cpu_ussage = 
     Text.Text = "CPU: " + CPU_TIME(); 
    } 
    // Provjera Procesa koristeći % 
    public string CPU_TIME() 
    { 
     float cpu_time; 

     cpu_time = cpu.NextValue(); 
     return Math.Round(Convert.ToDouble(cpu_time.ToString()), 2) + "%"; 

    } 
    private void timer1_tick(object sender, EventArgs e) 
    { 
     Text.Text = "CPU Time:" + CPU_TIME(); 
    } 
} 
+0

爲什麼'Convert.ToDouble(cpu_time.ToString())'? – Henrik

+3

可能重複嗎? http://stackoverflow.com/questions/2181828/why-the-cpu-performance-counter-kept-reporting-0-cpu-usage – Bridge

回答

0

你可以只用

return cpu.NextValue(); 
0

更換可能是因爲CPU%的程序ALRE後讀取ady運行並完成,這個計數器實際上是0.我試過你的例子,它確實打印0.但是,當你嘗試以下循環時,你會看到值。

using System; 
using System.Diagnostics; 
using System.Linq; 
using System.Threading; 



namespace Stackoverflow 
{ 
    public class PerfCounters 
    { 
     public static void Main() 
     { 
      var processorCategory = PerformanceCounterCategory.GetCategories() 
       .FirstOrDefault(cat => cat.CategoryName == "Processor"); 
      var countersInCategory = processorCategory.GetCounters("_Total"); 
      DisplayCounter(countersInCategory 
       .First(cnt => cnt.CounterName == "% Processor Time")); 
      Console.Read(); 
     } 
     private static void DisplayCounter(PerformanceCounter performanceCounter) 
     { 
      while (!Console.KeyAvailable) 
      { 
       Console.WriteLine("{0}\t{1} = {2}", 
        performanceCounter.CategoryName 
        , performanceCounter.CounterName 
        , performanceCounter.NextValue()); 
       Thread.Sleep(1000); 
      } 
     } 
    } 
} 

HTH

+0

仍然不能正常顯示0 –

+0

您需要是本地管理員才能訪問此內容。 – Ash