获取CPU使用率会生成"类别不存在"错误

Ash*_*sik 5 c#

我正在使用流动的代码,但它说该类别不存在.

static PerformanceCounter cpuUsage;

public static void Main(string[] args)
{
    cpuUsage = new PerformanceCounter("Processor", "% Processor Time", "_Total");

    Console.WriteLine(cpuUsage.NextValue() + " %");
    Thread.Sleep(1000);
    Console.WriteLine(cpuUsage.NextValue() + " %");
    Console.Read();
}
Run Code Online (Sandbox Code Playgroud)

小智 14

下午好!

此问题的核心原因是指向注册表中性能计数器的指针看似随机损坏.这种情况很少发生,但最常发生在Windows Server 2008 R2上.

严格来说,"处理"和"处理器"类别应始终默认存在为性能计数器.如果它们丢失了,可能还有许多其他计数器也丢失了.如果"处理器信息"计数器也被破坏,之前的解决方案将无法解决问题.要明确解决此问题,您可以运行以下命令:

lodctr /R
Run Code Online (Sandbox Code Playgroud)

这将修复你的计数器的任何破碎的指针.要验证此解决方案,您可以转到服务器管理器 - >监控 - >性能监视器 - >添加...在此视图中,您可以查看所有当前已注册的性能计数器."处理器"和"处理"现在都应该可用.或者,您也可以运行以下命令来查看所有可用计数器的状态:

lodctr /Q
Run Code Online (Sandbox Code Playgroud)

另请注意,此命令应从管理控制台运行; 否则此过程可能会失败,并显示"错误代码:5(拒绝访问)"

  • 以管理员身份运行lodctr / R时出错:“无法从系统备份存储重建性能计数器设置,错误代码为2”。在Windows 10上发生。嗯,解决方案只是再次运行它。硅片上的刻痕。 (3认同)

Ash*_*sik 6

使用

new PerformanceCounter("Processor Information", "% Processor Time", "_Total");
Run Code Online (Sandbox Code Playgroud)

代替

new PerformanceCounter("Processor", "% Processor Time", "_Total");
Run Code Online (Sandbox Code Playgroud)

  • 为什么?有什么不同? (3认同)

Nik*_*wal -2

它在我这边工作得很好。看图片。