C# 准确获取系统 CPU 利用率 每秒更新
时间: 2023-08-29 12:06:21 浏览: 148
可以使用 System.Diagnostics 命名空间下的 PerformanceCounter 类来获取系统 CPU 利用率,并结合 Timer 类实现每秒更新。具体步骤如下:
1. 引入 System.Diagnostics 和 System.Timers 命名空间:
```
using System.Diagnostics;
using System.Timers;
```
2. 创建 PerformanceCounter 对象:
```
PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
```
其中,第一个参数 "Processor" 表示 CPU 监视器,第二个参数 "% Processor Time" 表示 CPU 使用率,第三个参数 "_Total" 表示所有 CPU 核心的总体使用率。
3. 创建 Timer 对象:
```
Timer timer = new Timer(1000);
```
其中,1000 表示每隔 1000ms(即每秒)触发一次事件。
4. 绑定 Elapsed 事件处理方法:
```
timer.Elapsed += new ElapsedEventHandler(OnTimerElapsed);
```
5. 实现 Elapsed 事件处理方法,读取并更新 CPU 使用率:
```
void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
float cpuUsage = cpuCounter.NextValue();
Console.WriteLine("CPU 使用率:{0}%", cpuUsage);
}
```
注意,第一次调用 NextValue 方法获取的是 0,因为需要先获取一次初始值,之后才能获取正确的 CPU 使用率。
6. 启动 Timer:
```
timer.Start();
```
完整示例代码如下:
```
using System;
using System.Diagnostics;
using System.Timers;
class Program
{
static PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
static void Main(string[] args)
{
// 获取初始值
cpuCounter.NextValue();
// 创建 Timer
Timer timer = new Timer(1000);
timer.Elapsed += new ElapsedEventHandler(OnTimerElapsed);
timer.Start();
// 等待用户输入
Console.ReadLine();
}
static void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
// 获取 CPU 使用率
float cpuUsage = cpuCounter.NextValue();
Console.WriteLine("CPU 使用率:{0}%", cpuUsage);
}
}
```
注意,由于 Timer 是在新线程中触发 Elapsed 事件处理方法的,因此需要将 PerformanceCounter 对象定义为静态变量,以便在不同线程中共享。
阅读全文