C#程序开发,使用OpenHardwareMonitor测量 Windows 运行状态

1、数据结构

using System;namespace PcMonitor.Protocol
{[Serializable]public class MachineInfo{public CpuInfo Cpu;public MemoryInfo Memory;public GpuInfo Gpu;public MachineInfo(CpuInfo cpu, MemoryInfo memory, GpuInfo gpu){Cpu = cpu;Memory = memory;Gpu = gpu;}public override string ToString(){return $"{nameof(Cpu)}: {Cpu}, {nameof(Memory)}: {Memory}, {nameof(Gpu)}: {Gpu}";}}[Serializable]public class CpuInfo{public string Name;public Element Temperature;public Element Load;public Element Watt;public CpuInfo(string name, Element temperature, Element load, Element watt){Name = name;Temperature = temperature;Load = load;Watt = watt;}public override string ToString(){return $"{nameof(Name)}: {Name}, {nameof(Temperature)}: {Temperature}, {nameof(Load)}: {Load}, {nameof(Watt)}: {Watt}";}}[Serializable]public class MemoryInfo{public string Name;public Element Load;public MemoryInfo(string name, Element load){Name = name;Load = load;}public override string ToString(){return $"{nameof(Name)}: {Name}, {nameof(Load)}: {Load}";}}[Serializable]public class GpuInfo{public string Name;public Element Temperature;public Element Load;public Element Watt;public GpuInfo(string name, Element temperature, Element load, Element watt){Name = name;Temperature = temperature;Load = load;Watt = watt;}public override string ToString(){return $"{nameof(Name)}: {Name}, {nameof(Temperature)}: {Temperature}, {nameof(Load)}: {Load}, {nameof(Watt)}: {Watt}";}}[Serializable]public class Element{public string Type;public string Target;public float? Max;public float? Current;public Element(string type, string target, float? max, float? current){Type = type;Target = target;Max = max;Current = current;}public override string ToString(){return$"{nameof(Type)}: {Type}, {nameof(Target)}: {Target}, {nameof(Max)}: {Max}, {nameof(Current)}: {Current}";}}
}

2、帮助类

OpenHardwareMonitor允许您使用以下方式获取机器信息
基本用法如下。

OpenHardwareMonitor.Hardware.Computer创造
Computer.Open()称呼
IHardware得到你需要的东西
IHardware获取各种数值

using System;
using System.Linq;
using OpenHardwareMonitor.Hardware;
using PcMonitor.Protocol;namespace PcMonitor
{public sealed class HardwareObserver : IDisposable{private readonly Computer _computer = new();private readonly IHardware? _cpu;private readonly IHardware? _memory;private readonly IHardware? _gpu;public HardwareObserver(){_computer.Open();_computer.CPUEnabled = true;_computer.RAMEnabled = true;_computer.GPUEnabled = true;foreach (var hardware in _computer.Hardware){switch (hardware.HardwareType){case HardwareType.CPU:_cpu = hardware;break;case HardwareType.RAM:_memory = hardware;break;case HardwareType.GpuNvidia:case HardwareType.GpuAti:_gpu = hardware;break;}}}public MachineInfo GetMachineInfo(){_cpu?.Update();_memory?.Update();_gpu?.Update();var cpuInfo = GetCpuInfo();var memoryInfo = GetMemoryInfo();var gpuInfo = GetGpuInfo();return new MachineInfo(cpuInfo, memoryInfo, gpuInfo);}private GpuInfo? GetGpuInfo(){if (_gpu == null) return null;// GPU温度var gpuTemperature = _gpu.Sensors.FirstOrDefault(sensor =>sensor.SensorType == SensorType.Temperature && sensor.Name == "GPU Core");// 負荷var gpuLoad = _gpu.Sensors.FirstOrDefault(sensor => sensor.SensorType == SensorType.Load&& sensor.Name == "GPU Core");// 消費電力var gpuPower = _gpu.Sensors.FirstOrDefault(sensor => sensor.SensorType == SensorType.Power&& sensor.Name == "GPU Power");var gpuInfo = new GpuInfo(_gpu.Name,new Element("Temperature", gpuTemperature?.Name, gpuTemperature?.Max, gpuTemperature?.Value),new Element("Load", gpuLoad?.Name, gpuLoad?.Max, gpuLoad?.Value),new Element("Watt", gpuPower?.Name, gpuPower?.Max, gpuPower?.Value));return gpuInfo;}private MemoryInfo? GetMemoryInfo(){if (_memory == null) return null;var memoryLoad = _memory.Sensors.FirstOrDefault(sensor => sensor.SensorType == SensorType.Load);var memoryInfo = new MemoryInfo(_memory.Name,new Element("Memory Load", _memory.Name, memoryLoad?.Max, memoryLoad?.Value));return memoryInfo;}private CpuInfo? GetCpuInfo(){if (_cpu == null) return null;// CPU温度var cpuTemperature = _cpu.Sensors.FirstOrDefault(sensor =>sensor.SensorType == SensorType.Temperature && sensor.Name == "CPU Package");// CPU負荷var cpuLoad = _cpu.Sensors.FirstOrDefault(sensor => sensor.SensorType == SensorType.Load&& sensor.Name == "CPU Total");// CPU消費電力var cpuWatt = _cpu.Sensors.FirstOrDefault(sensor => sensor.SensorType == SensorType.Power&& sensor.Name == "CPU Package");var cpuInfo = new CpuInfo(_cpu.Name,new Element("Temperature", cpuTemperature?.Name, cpuTemperature?.Max, cpuTemperature?.Value),new Element("Load", cpuLoad?.Name, cpuLoad?.Max, cpuLoad?.Value),new Element("Watt", cpuWatt?.Name, cpuWatt?.Max, cpuWatt?.Value));return cpuInfo;}public void Dispose(){_computer.Close();}}
}

3、调用

using System;
using System.Threading;
using System.Threading.Tasks;
using PcMonitor;using var hardwareObserver = new HardwareObserver();while (true)
{var machineInfo = hardwareObserver.GetMachineInfo();Console.WriteLine(machineInfo);await Task.Delay(TimeSpan.FromSeconds(1));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电能表预付费系统-标准传输规范(STS)(30)

6.5.3.2 CONTROLBlock construction The 1 6 digit CONTROLBlock is constructed from the data elements in the APDU as defined in Table 36 and Table 37.The most significant digit is in position 1 5 and the least significant digit in position 0. APDU中的数据元素…

Jmeter基础篇(19)JSR223预处理器

前言 JSR223预处理器是Apache JMeter中的一个组件,它允许用户使用任何支持Java Scripting API (JSR 223) 的脚本语言来执行预处理任务。这个功能非常强大,因为它让测试人员能够利用如Groovy、JavaScript(Nashorn引擎)、BeanShell…

Python基于TensorFlow实现双向循环神经网络GRU加注意力机制分类模型(BiGRU-Attention分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展,循环神经网络(RNN)及其变种如门控循环…

echart实现地图数据可视化

文章目录 [TOC](文章目录) 前言一、基本地图展示2.数据可视化 总结 前言 最近工作安排使用echarts来制作图形报表,记录一下我的步骤,需求呈现一个地图,地图显示标签,根据业务指标值给地图不同省市填充不同颜色,鼠标放…

数学真题总结

举反例 看清正负号 对应的特征值一致 不用裁开计算行列式要注意符号!!! 根据值的大小确定正负 没有思路就构建tanx求极值要考虑端点线性方程:求通解归并x几何意义 整体思想 u e^x y都设计好了,曲线是f(x,y) 0,直接把…

ES跟Kafka集成

配合流程 1. Kafka作为分布式流处理平台,能够实时收集和处理不同数据源的数据流; 2. 通过Kafka Connect或者Logstash等中间件,可以将Kafka中的数据流实时推送到Elasticsearch中; 3. Elasticsearch接收到数据后,会根据…

价格文本对齐

记录一下工作里常遇到的一些简单问题: 需求是一个购买按钮上同时展示原价和现价: 1.原价现价文本格式不同 2.原价切需要加打折红线,不方便用富文本一个文本处理。 3.需要对两条文本适配父节点的宽度,不能超出按钮 以下是实现代…

c++:vector模拟实现

一、vector成员变量 库里实现用的就是这三个成员变量&#xff0c;咱们实现跟库里一样&#xff0c; namespace myvector {template<class T>class vector{public://vecttor的迭代器是原生指针typedef T* iterator;typedef const T* const_iterator; private:iterator _sta…

【热门主题】000023 计算机视觉:算法与应用的深度探索

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…

国产服务器平台离线部署k8s和kubesphere(含离线部署新方式)

"信创&#xff1a;鲲鹏麒麟&#xff0c;ARM64架构&#xff0c;实现K8s和Kubesphere的离线部署&#xff0c;全新方式助力企业高效运维。" 本文将深入探讨如何借助鲲鹏CPU(arm64)和操作系统Kylin V10 SP2/SP3,通过KubeKey制作KubeSphere与Kubernetes的离线安装包&#…

「C/C++」C/C++ 之 指针详解

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

CSS--导航栏案例

利用CSS制作北大官网导航栏 详细代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#menu{background-color: darkred;width: 100%;height: 50px…

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割&#xff01; 【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割&#xff01; 文章目录 【语义分割|代码解析】CMTFNet-2: …

基于 Python 的 Django 框架开发的电影推荐系统

项目简介&#xff1a;本项目是基于 Python 的 Django 框架开发的电影推荐系统&#xff0c;主要功能包括&#xff1a; 电影信息爬取&#xff1a;获取并更新电影数据。数据展示&#xff1a;提供电影数据的列表展示。推荐系统&#xff1a;基于协同过滤算法实现个性化推荐。用户系…

高并发场景下的性能测试方法!

在现代互联网应用中&#xff0c;高并发场景下的性能测试显得尤为重要。无论是电商平台的秒杀活动&#xff0c;还是社交应用的突发流量&#xff0c;都需要确保系统能够在高并发情况下稳定运行。本文将详细介绍高并发场景下的性能测试方法&#xff0c;并提供具体的方案和实战演练…

超萌!HTMLCSS:超萌卡通熊猫头

效果演示 创建了一个卡通风格的熊猫头 HTML <div class"box"><div class"head"><div class"head-copy"></div><div class"ears-left"></div><div class"ears-right"></di…

springboot高校运动会管理系统-计算机毕业设计源码33814

摘要 本文旨在介绍基于Spring Boot框架和HTML技术开发的高校运动会管理系统。通过该系统&#xff0c;学校能够更高效地组织和管理校园内的各项体育赛事&#xff0c;提升运动会的组织效率和参与体验。系统整合了Spring Boot的强大功能和HTML的灵活性&#xff0c;为高校运动会管理…

Linux特种文件系统--tmpfs文件系统

tmpfs类似于RamDisk&#xff08;只能使用物理内存&#xff09;&#xff0c;使用虚拟内存&#xff08;简称VM&#xff09;子系统的页面存储文件。tmpfs完全依赖VM&#xff0c;遵循子系统的整体调度策略。说白了tmpfs跟普通进程差不多&#xff0c;使用的都是某种形式的虚拟内存&a…

森利威尔SL2516D 耐压60V内置5V功率MOS 支持PWM LED恒流驱动器芯片

一、基本特性 型号&#xff1a;SL2516D封装&#xff1a;ESOP8工作频率&#xff1a;140kHz驱动MOS管&#xff1a;内置 二、电气特性 输入电压范围&#xff1a;8V~100V&#xff08;注意&#xff0c;虽然问题中提到耐压60V&#xff0c;但根据官方信息&#xff0c;其实际耐压范围…

力扣287.寻找重复数

1.哈希表法 #include<stdio.h> #include<stdlib.h> int func(int *arr,int len) {int *hash(int *)malloc(sizeof(int)*len);for(int i0;i<len;i){if(hash[arr[i]]1){free(hash);return arr[i];}hash[arr[i]]1;}free(hash);return -1; }int main() {int arr[5]{…