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> /// 获取计算机相关的 ...
随机推荐
- 常用的头文件—— common.h
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/sta ...
- TFIDF<细读>
概念 TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文 ...
- C#轻量级通通讯组件StriveEngine —— C/S通信开源demo(2) —— 使用二进制协议 (附源码)
前段时间,有几个研究ESFramework通信框架的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关 ...
- Akka-CQRS(6)- read-side
前面我们全面介绍了在akka-cluster环境下实现的CQRS写端write-side.简单来说就是把发生事件描述作为对象严格按发生时间顺序写入数据库.这些事件对象一般是按照二进制binary方式如 ...
- ECDSA数字签名算法
一.ECDSA概述 椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟.ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准.它在 ...
- 14.不同条目的listview
分类界面 整个项目的逻辑就是这样的 CategoryInfo public class CategoryInfo { private String title; private String url ...
- 安卓ListView行详细内容展示页编写和下拉刷新实现
ListView行详细内容展示页: 使用轻量级的Fragment实现Listview行内容简单的详细信息展示: 值得注意的是: 1. 主布局(打开它的Activity)必须是FrameLayout布局 ...
- 一看看懂Protocol Buffer(协议篇)
前言 由于笔者业团队的业务对即时通讯服务有很大的依赖,春节结束后的第一天,红包没到,产品同学先到了,产品同学和我说要做一款IM,看到需求文档后和设计图后笔者大吃一斤 这不就是一个翻版的web qq吗? ...
- strace命令用法
-tt 在每行输出的前面,显示毫秒级别的时间 -T 显示每次系统调用所花费的时间 -v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来. -f 跟踪目标进程,以及目标进程创建的所有子进程 ...
- MyEclipse中JavaMail冲突问题
MyEclipse中的JavaEE5中的mail包中只有接口,而没有实现,所以不能使用 会抛出:java.lang.NoClassDefFoundError: com/sun/mail/util/BE ...