Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 性能计数器,显示0%_C# - Fatal编程技术网

C# 性能计数器,显示0%

C# 性能计数器,显示0%,c#,C#,我有一个问题:我的性能程序总是显示0%的CPU使用率 我添加了一个名为文本值CPU的标签: 代码如下: public partial class Form1 : Form { PerformanceCounter cpu = new PerformanceCounter ("Processor", "% Processor Time", "_Total"); public Form1() { InitializeComponent();

我有一个问题:我的性能程序总是显示0%的CPU使用率

我添加了一个名为文本值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();
    }
}

你可以换成

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())
可能重复?您需要是本地管理员才能访问此文件。