C#中如何通过代码获取当前机器CPU的温度
2024-07-26
44
问题描述
有时候,我们需要为应用程序收集一些系统的信息,使用C#很容易获得可用内存和CPU负载之类的信息,但不幸的是,CPU温度不是那么容易,之前也尝试使用WMI,但无法获取。
问题解决
Open Hardware Monitor
Open Hardware Monitor是一款免费的开源软件,可监测温度传感器、风扇速度、电压、负载和计算机时钟速度。Open Hardware Monitor支持当今主板上的大多数硬件监控芯片。CPU温度可以通过读取Intel和AMD处理器的核心温度传感器进行监测。可以显示ATI和Nvidia视频卡的传感器以及SMART硬盘温度。监视的值可以显示在主窗口、可自定义的桌面小工具或系统托盘中。免费Open Hardware Monitor软件在32位和64位Microsoft Windows XP/Vista/7/8/8.1/10以及任何基于x86的Linux操作系统上运行,无需安装。网址:https://openhardwaremonitor.org/
同时Open Hardware Monitor还提供了C#的动态库可以使用,在C#中我们可以借助这个动态库来获取CPU的问题。
如何使用?
通过nuget安装
在工程的nuget包管理中搜索OpenHardwareMonitor,安装如下图所示的包即可:
使用参考代码
首先新建一个C#类CpuTemperatureReader:
internal sealed class CpuTemperatureReader : IDisposable
{
private readonly Computer _computer;
public CpuTemperatureReader()
{
_computer = new Computer { CPUEnabled = true };
_computer.Open();
}
public IReadOnlyDictionarystring, float GetTemperaturesInCelsius()
{
var coreAndTemperature = new Dictionarystring, float();
foreach (var hardware in _computer.Hardware)
{
hardware.Update(); //use hardware.Name to get CPU model
foreach (var sensor in hardware.Sensors)
{
if (sensor.SensorType == SensorType.Temperature sensor.Value.HasValue)
coreAndTemperature.Add(sensor.Name, sensor.Value.Value);
}
}
return coreAndTemperature;
}
public void Dispose()
{
try
{
_computer.Close();
}
catch (Exception)
{
//ignore closing errors
}
}
}
调用示例:
public static void Main()
{
while (true)
{
CpuTemperatureReader ctr = new CpuTemperatureReader();
var ts = ctr.GetTemperaturesInCelsius();
foreach (var t in ts)
{
Console.WriteLine({0}-{1} ℃, t.Key, t.Value);
}
Thread.Sleep(1000);
}
}
以上代码每个1秒中更新获取一次CPU的问题并打印出来,运行结果示例如下:
CPU Core #1-95 ℃
CPU Core #2-91 ℃
CPU Core #3-89 ℃
CPU Core #4-93 ℃
CPU Core #5-83 ℃
CPU Core #6-88 ℃
CPU Package-95 ℃
CPU Core #1-96 ℃
CPU Core #2-91 ℃
CPU Core #3-89 ℃
CPU Core #4-94 ℃
CPU Core #5-87 ℃
CPU Core #6-89 ℃
CPU Package-97 ℃
以上就是获取到的每个核心的问题和CPUPackage的温度值。
更新于:1个月前注:这个程序需要已管理员身份运行,否则可能会获取失败。
赞一波!2
相关文章
- 春节代码 新年快乐html 灯笼js
- 圣诞树代码 下雪
- 表白代码,爱心树html
- git pull 从远程获取代码并合并本地的版本
- 使用C#的Socket实现最简单的TCP通信示例代码
- vscode中自动将json格式的内容自动生成对应的代码
- 代码写得好 在哪里都能蹦迪
- C#检测网络端口是否被占用的参考代码
- vscode打开代码中文显示乱码的问题
- C#中如何获取当前系统CPU的核心数
- HTML-CSS-JS Prettify 代码格式化插件
- 有哪些好的机器学习 Python 包?
- 有没有一个在线工具可以将Python代码转换为Java代码?
- 为什么C代码比Python代码运行得更快?
- 你如何在 Python 中编写自动售货机代码?
- 代码中的解耦思维
- 在C#中通过Windows API读写INI文件的简单实现代码
- 在C#中实现局域网中不在同一子网的两个机器双向UDP组播
- C#中通过代码获取当前系统主板BIOS中序列号等信息的方法
- Python代码转换成C++
文章评论
全部评论