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. 目标检测算法(1)目标检测中的问题描述和R-CNN算法

    目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...

  2. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  3. TextView的跑马灯效果实现

    TextView的跑马灯效果实现 问题描述 当文字内容过长,但是只允许显示一行时,可以将文字显示为跑马灯效果,即文字滚动显示. 代码实现 第一种方法实现 先查询TextView控件的属性,得到以下信息 ...

  4. DOS窗口查看端口占用

    背景:最近用tomcat,一直访问不了,要账号密码登录,最后发现问题原因根本是tomcat的默认端口号8080被占用了,下面介绍如何通过dos窗口找到占用端口的进程. 方法: 打开DOS窗口,输入ne ...

  5. HTML5之日历控件

    HTML5定义了几个与日期有关的新控件.支持日期控件的浏览器会提供一个方便的下拉式日历,供用户选择. 以下测试和截图都是在谷歌浏览器完成的,其他浏览器可能略有差异. 1.日期时间控件 HTML代码: ...

  6. ajax jsonp请求报错not a function的解决方案

    概述 最近工作中使用ajax,有时会报json4 is not a function的错误,有时又不会报错.找了很久,网上说是因为多次请求同一个资源导致的,但是我检查了自己的代码,对于重复资源并没有重 ...

  7. Anaconda / Conda 实践

    一.环境 CentOS 7.6 有预装 python 2.7 二.Anaconda 与 Conda 区别 1.Anaconda Anaconda 是Python的一种发行版.包含了: (1)conda ...

  8. WHERE 子句用于规定选择的标准

    WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. (也称条件查询语句) 语法SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的& ...

  9. C语言小笔记

    头文件的书写 头文件实现函数声明,在使用模板后可以实现一个C文件中即使重复包含某个头文件,在系统中用于只会确认为一个包含 头文件包含可以理解为将头文件内容替换#include“...”行 模板(don ...

  10. 【shiro】(1)---了解权限管理

    了解权限管理 一.概念 1.什么是权限管理 只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源. 权限管理包 ...