C# 性能计数器,显示0%
我有一个问题:我的性能程序总是显示0%的CPU使用率 我添加了一个名为文本值CPU的标签: 代码如下:C# 性能计数器,显示0%,c#,C#,我有一个问题:我的性能程序总是显示0%的CPU使用率 我添加了一个名为文本值CPU的标签: 代码如下: public partial class Form1 : Form { PerformanceCounter cpu = new PerformanceCounter ("Processor", "% Processor Time", "_Total"); public Form1() { InitializeComponent();
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();
}
}
你可以换成
return cpu.NextValue();
可能是因为CPU%是在程序已经运行并完成之后读取的,而此计数器实际上是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为什么
转换.ToDouble(cpu\u time.ToString())
可能重复?您需要是本地管理员才能访问此文件。