C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率:

先看界面:

建一个 Windows Form  桌面程序,代码如下:

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading; namespace PerformanceCounterApp
{
public partial class MainForm : Form
{
private BackgroundWorker backgroundWorker;
private bool isWorking = false; public MainForm()
{
InitializeComponent();
} private void Form_Load(object sender, EventArgs e)
{
cpuLabel.Text = string.Empty;
diskLabel.Text = string.Empty;
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.DoWork += BackgroundWorker_DoWork;
backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;
backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
} private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
//PerformanceCounter diskp = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
isWorking = true;
backgroundWorker.ReportProgress(, "Loading.../");
PerformanceCounter cpup = new PerformanceCounter("Processor", "% Processor Time", "_Total");
PerformanceCounter diskp = new PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "_Total");
try
{
do
{
Thread.Sleep();
var cpuv1 = (int)cpup.NextValue();
var diskv1 = (int)diskp.NextValue();
Thread.Sleep();
var cpuv2 = (int)cpup.NextValue();
var diskv2 = (int)diskp.NextValue();
Thread.Sleep();
var cpuv3 = (int)cpup.NextValue();
var diskv3 = (int)diskp.NextValue();
Thread.Sleep();
var cpuv4 = (int)cpup.NextValue();
var diskv4 = (int)diskp.NextValue();
var cpuv = (cpuv1 + cpuv2 + cpuv3 + cpuv4) / ;
var diskv = (diskv1 + diskv2+ diskv3 + diskv4) / ;
string data = $"{cpuv}%/{diskv}";
backgroundWorker.ReportProgress(,data);
} while (!backgroundWorker.CancellationPending);
}
catch (Exception)
{
throw;
}
finally
{
cpup.Dispose();
diskp.Dispose();
isWorking = false;
}
}
private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
string[] data = e.UserState.ToString().Split('/');
cpuLabel.Text = $"CPU: {data[0]}";
diskLabel.Text = $"Disk: {data[1]} Bytes/sec";
}
private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var result = e.Result;
var cc = e.Cancelled;
} private void startButton_Click(object sender, EventArgs e)
{
if (backgroundWorker.CancellationPending) return;
if (isWorking)
{
startButton.Text = "Start";
backgroundWorker.CancelAsync();
}
else
{
startButton.Text = "Stop";
backgroundWorker.RunWorkerAsync();
}
} private void Form_Closed(object sender, FormClosedEventArgs e)
{
if (isWorking)
{
startButton.Enabled = false;
backgroundWorker.CancelAsync();
}
}
}
}

C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率的更多相关文章

  1. C#获取cpu序列号 硬盘ID 网卡硬地址以及操作注册表 .

    转:http://blog.csdn.net/smartsmile2012/article/details/8682295 #region 获取cpu序列号 硬盘ID 网卡硬地址 /**/ /// & ...

  2. 获取CPU和内存的使用率

    1.获取CPU的使用率 主要就是一个计算. int CUseRate::GetCPUUseRate() //获取CPU使用率 { ; FILETIME ftIdle, ftKernel, ftUser ...

  3. python在windows下获取cpu、硬盘、bios、主板序列号

    测试 此处使用的是wmi库,可以去google里面搜索“python wmi” import os, sysimport timeimport wmi,zlib def get_cpu_info() ...

  4. Linux下使用java获取cpu、内存使用率

    原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...

  5. 获取本机CPU,硬盘等使用情况

    早上的时候接到主管的一个任务,要获取服务器上的cpu,硬盘, 数据库等 的使用情况,并以邮件的方式发给boss, = =没办法,公司的服务器真是不敢恭维,顺便吐槽一下公司的网速,卡的时候30k左右徘徊 ...

  6. C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

    using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...

  7. 获取CPU序列号、网卡MAC地址、硬盘序列号

    <pre name="code" class="csharp"> using System; using System.Collections; u ...

  8. Qt获取CPU编号和硬盘序列号

    windows下执行命令除了用cmd之外,还有个东西叫WMIC,非常强大,可以通过他获取很多信息,包括硬件信息. QString frmMain::getWMIC(const QString & ...

  9. C# 获取计算机cpu,硬盘,内存相关的信息

    using System;using System.Management; namespace MmPS.Common.Helper{ /// <summary> /// 获取计算机相关的 ...

随机推荐

  1. 25.HashTable

    在java中有两个类都提供了一个多种用途的hashTable机制,他们都可以将key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的 ...

  2. K-DTree学习

    应用于K维数据的快速查找,比如横坐标,纵坐标,价格……,本模板以16青岛区域赛K题为例 —— 三维K - D Tree 模板 我们应该都见过平衡树吧,那就是1-D树,变成k维之后,我们连续分割1 - ...

  3. Python在Windows上安装配置测试

    Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 2.x还是3.x 目前,Python ...

  4. ImportError: No module named MySQLdb</module>

    1,遇到说是没有安装某个模块的时候,第一种方法是在官网自己手动下载这个包然后安装 链接:https://pypi.org/project/MySQL-python/ 2,参考https://www.j ...

  5. PHP+XML写注册登录

    2018/12/06  今天尝试了下PHP   使用PHP+XML写注册登录   具体保存于上传的文件中 从此山水不相逢  莫问他人长与短

  6. AFNetWorking使用自签证书验证

    In order to validate a domain name for self signed certificates, you MUST use pinning 上述问题的解决方法: sec ...

  7. VSCode插件开发全攻略(二)HelloWord

    更多文章请戳VSCode插件开发全攻略系列目录导航. 写着前面 学习一门新的语言或者生态首先肯定是从HelloWord开始. 您可以直接克隆我放在GitHub上vscode-plugin-demo 的 ...

  8. 【分布式缓存系列】集群环境下Redis分布式锁的正确姿势

    一.前言 在上一篇文章中,已经介绍了基于Redis实现分布式锁的正确姿势,但是上篇文章存在一定的缺陷——它加锁只作用在一个Redis节点上,如果通过sentinel保证高可用,如果master节点由于 ...

  9. Python学习笔记【第二篇】:运算符、比较、关系运算符

    运算符 python支持以下几种运算符 算术运算符 运算符 描述 实例 + 加 两个对象相加 a + b 输出结果 30 - 减 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 ...

  10. 【ABP杂烩】面向切面编程(AOP)知识总结

    目录 1.存在问题 2.AOP的概念 3.AOP应用范围 3.AOP实现方式 4.应用举例 5.结束语 本文在学习[老张的哲学]系列文章AOP相关章节后,自己归纳总结的笔记. 1.存在问题 最近,其它 ...