C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率
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 和 硬盘的使用率的更多相关文章
- C#获取cpu序列号 硬盘ID 网卡硬地址以及操作注册表 .
转:http://blog.csdn.net/smartsmile2012/article/details/8682295 #region 获取cpu序列号 硬盘ID 网卡硬地址 /**/ /// & ...
- 获取CPU和内存的使用率
1.获取CPU的使用率 主要就是一个计算. int CUseRate::GetCPUUseRate() //获取CPU使用率 { ; FILETIME ftIdle, ftKernel, ftUser ...
- python在windows下获取cpu、硬盘、bios、主板序列号
测试 此处使用的是wmi库,可以去google里面搜索“python wmi” import os, sysimport timeimport wmi,zlib def get_cpu_info() ...
- Linux下使用java获取cpu、内存使用率
原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...
- 获取本机CPU,硬盘等使用情况
早上的时候接到主管的一个任务,要获取服务器上的cpu,硬盘, 数据库等 的使用情况,并以邮件的方式发给boss, = =没办法,公司的服务器真是不敢恭维,顺便吐槽一下公司的网速,卡的时候30k左右徘徊 ...
- C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑
using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...
- 获取CPU序列号、网卡MAC地址、硬盘序列号
<pre name="code" class="csharp"> using System; using System.Collections; u ...
- Qt获取CPU编号和硬盘序列号
windows下执行命令除了用cmd之外,还有个东西叫WMIC,非常强大,可以通过他获取很多信息,包括硬件信息. QString frmMain::getWMIC(const QString & ...
- C# 获取计算机cpu,硬盘,内存相关的信息
using System;using System.Management; namespace MmPS.Common.Helper{ /// <summary> /// 获取计算机相关的 ...
随机推荐
- docker容器下mysql更改WordPress的site address和home(URL)------局域网
先简单介绍下,用docker安装的WordPress,mysql是在docker容器中的,并未在Ubuntu(我把WordPress是安装Ubuntu系统上),即WordPress和Ubuntu是独立 ...
- Eclipse项目里面看源码和文档
Eclipse项目里面看源码 1.新建项目列表 2.进入struts2-core-2.3.20.jar,双击之后,看不到源码 3.右键struts2-core-2.3.20.jar,选择propert ...
- git 的学习使用记录
git initls -ahgit add xxxgit commit -m "some message" git statusgit loggit log --pretty=on ...
- vue的学习之路
一.vs code中,适合vue的前端插件 查看网址:http://blog.csdn.net/caijunfen/article/details/78749766 二.如何使用git从gitub上拉 ...
- CS61A Lecture3 Note
本次lec主讲控制流 本文档只列一些py控制流与C不同的地方 print的功能不同 可以print出来None这种东西 重点讲了函数运行机制,我的理解是这样的,在调用函数之前,def会产生一个glo ...
- jackson 用法总结
1.序列化与反序列化封装 private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class); /** * Obj ...
- Java线程小刀牛试
线程简介 什么是线程 现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器.堆栈和局部变量等属性,并且 ...
- map,set和weakmap,weakset
概述 set和map属于es6的内容,今天在看书的时候遇到了,所以好好的总结一下,供以后开发时参考,相信对其他人也有用. 参考资料: mdn Keyed collections Map和WeakMap ...
- 第八篇: 服务链路追踪(Spring Cloud Sleuth)
一.简介 一个分布式系统由若干分布式服务构成,每一个请求会经过多个业务系统并留下足迹,但是这些分散的数据对于问题排查,或是流程优化都很有限. 要能做到追踪每个请求的完整链路调用,收集链路调用上每个 ...
- 简单的ld链接脚本学习
一. 链接脚本的整体认识 什么是链接文件呢?作用是什么呢? 当编写了多个C文件时,我们将他们编译链接成一个可执行的文件,此时就需要用到链接脚本文件(ld).ld脚本主要功能就是:将多个目标文件(.o) ...