news 2026/5/12 21:45:34

C# 实时查看硬件使用率(CPU 内存 硬盘 网络)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# 实时查看硬件使用率(CPU 内存 硬盘 网络)

一、整体架构

┌─────────────────────────────────────────────────────────────┐ │ 硬件资源监控系统 │ ├─────────────────────────────────────────────────────────────┤ │ 数据采集层 │ 业务逻辑层 │ 展示层 │ 告警层 │ │ │ │ │ │ │ • PerformanceCounter │ • 数据缓存 │ • WinForms │ │ • WMI (ManagementObject) │ • 定时采样 │ • WPF │ │ • System.Diagnostics │ • 历史记录 │ • 上位机 │ │ • SNMP / SSH (远程) │ • 阈值判断 │ • Web API │ └─────────────────────────────────────────────────────────────┘

二、方案一:本机实时监控

适合:上位机、工业PC、边缘网关

2.1 核心类(HardwareMonitor.cs)

usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Management;usingSystem.Threading;namespaceHardwareMonitor{publicclassHardwareMonitor{privatereadonlyTimer_timer;privatereadonlyint_intervalMs;publicdelegatevoidHardwareDataHandler(HardwareDatadata);publiceventHardwareDataHandlerOnDataUpdated;publicHardwareMonitor(intintervalMs=1000){_intervalMs=intervalMs;_timer=newTimer(Collect,null,Timeout.Infinite,Timeout.Infinite);}publicvoidStart()=>_timer.Change(0,_intervalMs);publicvoidStop()=>_timer.Change(Timeout.Infinite,Timeout.Infinite);privatevoidCollect(objectstate){vardata=newHardwareData{CpuUsage=GetCpuUsage(),MemoryUsedMb=GetMemoryUsed(),MemoryTotalMb=GetMemoryTotal(),DiskUsage=GetDiskUsage(),NetworkSentKBps=GetNetworkSent(),NetworkReceivedKBps=GetNetworkReceived(),Temperature=GetCpuTemperature()};OnDataUpdated?.Invoke(data);}#regionCPUprivatefloatGetCpuUsage(){usingvarcpu=newPerformanceCounter("Processor","% Processor Time","_Total");cpu.NextValue();Thread.Sleep(100);returncpu.NextValue();}#endregion#regionMemoryprivatefloatGetMemoryUsed(){usingvarmem=newPerformanceCounter("Memory","Committed Bytes");returnmem.NextValue()/1024/1024;}privatefloatGetMemoryTotal(){usingvarmem=newPerformanceCounter("Memory","Commit Limit");returnmem.NextValue()/1024/1024;}#endregion#regionDiskprivatefloatGetDiskUsage(){usingvardisk=newPerformanceCounter("PhysicalDisk","% Disk Time","_Total");disk.NextValue();Thread.Sleep(100);returndisk.NextValue();}#endregion#regionNetworkprivatefloatGetNetworkSent(){usingvarnet=newPerformanceCounter("Network Interface","Bytes Sent/sec",GetNetworkCard());returnnet.NextValue()/1024;}privatefloatGetNetworkReceived(){usingvarnet=newPerformanceCounter("Network Interface","Bytes Received/sec",GetNetworkCard());returnnet.NextValue()/1024;}privatestringGetNetworkCard(){usingvarsearcher=newManagementObjectSearcher("SELECT Name FROM Win32_NetworkAdapter WHERE NetEnabled = true");foreach(ManagementObjectobjinsearcher.Get())returnobj["Name"].ToString();return"";}#endregion#regionTemperature(WMI)privatefloatGetCpuTemperature(){try{usingvarsearcher=newManagementObjectSearcher(@"root\WMI","SELECT CurrentTemperature FROM MSAcpi_ThermalZoneTemperature");foreach(ManagementObjectobjinsearcher.Get()){vartemp=Convert.ToDouble(obj["CurrentTemperature"].ToString());return(float)(temp/10.0-273.15);// Kelvin → Celsius}}catch{}return0;}#endregion}publicclassHardwareData{publicfloatCpuUsage{get;set;}publicfloatMemoryUsedMb{get;set;}publicfloatMemoryTotalMb{get;set;}publicfloatDiskUsage{get;set;}publicfloatNetworkSentKBps{get;set;}publicfloatNetworkReceivedKBps{get;set;}publicfloatTemperature{get;set;}publicoverridestringToString(){return$"CPU:{CpuUsage:F1}% MEM:{MemoryUsedMb:F0}/{MemoryTotalMb:F0}MB DISK:{DiskUsage:F1}% TEMP:{Temperature:F1}℃";}}}

三、WPF 实时显示

3.1 MainWindow.xaml

<Windowx:Class="HardwareMonitor.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"Title="硬件实时监控"Height="320"Width="400"><StackPanelMargin="20"><TextBlockText="CPU 使用率"FontWeight="Bold"/><ProgressBarx:Name="CpuBar"Height="20"Maximum="100"/><TextBlockx:Name="CpuText"/><TextBlockText="内存使用"FontWeight="Bold"Margin="0,10,0,0"/><ProgressBarx:Name="MemBar"Height="20"Maximum="100"/><TextBlockx:Name="MemText"/><TextBlockText="硬盘使用"FontWeight="Bold"Margin="0,10,0,0"/><ProgressBarx:Name="DiskBar"Height="20"Maximum="100"/><TextBlockText="CPU 温度"FontWeight="Bold"Margin="0,10,0,0"/><TextBlockx:Name="TempText"FontSize="16"Foreground="Red"/></StackPanel></Window>

3.2 MainWindow.xaml.cs

usingSystem.Windows;namespaceHardwareMonitor{publicpartialclassMainWindow:Window{privatereadonlyHardwareMonitor_monitor;publicMainWindow(){InitializeComponent();_monitor=newHardwareMonitor(1000);_monitor.OnDataUpdated+=UpdateUI;_monitor.Start();}privatevoidUpdateUI(HardwareDatadata){Dispatcher.Invoke(()=>{CpuBar.Value=data.CpuUsage;CpuText.Text=$"{data.CpuUsage:F1}%";MemBar.Value=data.MemoryUsedMb/data.MemoryTotalMb*100;MemText.Text=$"{data.MemoryUsedMb:F0}MB /{data.MemoryTotalMb:F0}MB";DiskBar.Value=data.DiskUsage;TempText.Text=$"{data.Temperature:F1}℃";});}}}

参考代码 C# 实时查看 硬件使用率(CPU/内存/硬盘等)www.youwenfan.com/contentcsu/62418.html

四、远程设备监控

4.1 通过 WMI 监控远程 Windows 设备

publicstaticfloatGetRemoteCpuUsage(stringip,stringuser,stringpwd){varoptions=newConnectionOptions{Username=user,Password=pwd,Impersonation=ImpersonationLevel.Impersonate};varscope=newManagementScope($"\\\\{ip}\\root\\cimv2",options);scope.Connect();usingvarsearcher=newManagementObjectSearcher(scope,newObjectQuery("SELECT LoadPercentage FROM Win32_Processor"));foreach(ManagementObjectobjinsearcher.Get())returnConvert.ToSingle(obj["LoadPercentage"]);return0;}

五、Linux / ARM / 嵌入式(STM32 上位机)

// Linuxcat/proc/cpuinfo cat/proc/meminfo df-h
publicstaticfloatGetLinuxCpuUsage(){varcpu=File.ReadAllText("/proc/stat").Split('\n')[0];returnParseCpu(cpu);}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 21:43:28

Redis Set:原理、命令与实战场景详解

Redis 数据结构精讲&#xff1a;Set 集合的原理、命令与实战场景 大家好&#xff0c;今天我们来聊聊 Redis 中一个非常实用的数据结构 ——Set&#xff08;集合&#xff09;。它和我们熟悉的列表&#xff08;List&#xff09;有很多相似之处&#xff0c;比如都能存储多个字符串…

作者头像 李华
网站建设 2026/5/12 21:39:07

别让查重和AI率卡住你的毕业!百考通AI的精准解决方案

每到毕业季&#xff0c;总有一场无声的战役悄然打响——它不是论文开题的迷茫&#xff0c;也不是数据收集的奔波&#xff0c;而是最后那道看似技术性、却足以让无数人熬红双眼的关卡&#xff1a;论文查重与AIGC检测。你是否也经历过这些场景&#xff1a;对着知网飘红的报告逐字…

作者头像 李华
网站建设 2026/5/12 21:37:15

转码使用教程

转换小程序使用说明 使用功能列表使用方式&#xff1a; 发送url链接/小程序分享/固定格式(微信小卡片)即可进行转换 链接生成二维码 条件&#xff1a;http或者https开头的链接小程序转普通二维码/详细信息/MP短链/小程序链/小程序码MP短链转普通二维码/详细信息/小程序链/小程序…

作者头像 李华
网站建设 2026/5/12 21:35:09

对比按量计费与TokenPlan套餐在长期项目中的成本观测差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比按量计费与TokenPlan套餐在长期项目中的成本观测差异 在持续数月的AI应用开发项目中&#xff0c;成本的可预测性与可控性是团队…

作者头像 李华
网站建设 2026/5/12 21:34:15

坏了,黑客学会用AI写外挂了

昨天刚聊完程序员为了省那23万Token账单连夜跑路的事儿&#xff0c;今天又出大事了。 而且这次不是钱包的问题——是有人在用AI造“数字万能钥匙”&#xff0c;想捅谁家窗户就捅谁家窗户。 听完你可能会想把家里智能门锁也换成铁锁头。 连坏人都开始用AI打工了&#xff1f;凌晨…

作者头像 李华
网站建设 2026/5/12 21:31:53

AI崛起,程序员还有出路吗?

今年的程序员可以说是最焦虑的一个群体了&#xff0c;面试找工作投简历没人理&#xff0c;有面试机会也面试不过&#xff0c;面试进去还干不长...于是&#xff0c;程序员们纷纷直呼&#xff1a;互联网寒冬又双叒叕来了&#xff0c;环境不好努力也没用躺平算了。真的是这样吗&am…

作者头像 李华