C# 实时查看硬件使用率(CPU 内存 硬盘 网络)
一、整体架构┌─────────────────────────────────────────────────────────────┐ │ 硬件资源监控系统 │ ├─────────────────────────────────────────────────────────────┤ │ 数据采集层 │ 业务逻辑层 │ 展示层 │ 告警层 │ │ │ │ │ │ │ • PerformanceCounter │ • 数据缓存 │ • WinForms │ │ • WMI (ManagementObject) │ • 定时采样 │ • WPF │ │ • System.Diagnostics │ • 历史记录 │ • 上位机 │ │ • SNMP / SSH (远程) │ • 阈值判断 │ • Web API │ └─────────────────────────────────────────────────────────────┘二、方案一本机实时监控适合上位机、工业PC、边缘网关2.1 核心类HardwareMonitor.csusingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Management;usingSystem.Threading;namespaceHardwareMonitor{publicclassHardwareMonitor{privatereadonlyTimer_timer;privatereadonlyint_intervalMs;publicdelegatevoidHardwareDataHandler(HardwareDatadata);publiceventHardwareDataHandlerOnDataUpdated;publicHardwareMonitor(intintervalMs1000){_intervalMsintervalMs;_timernewTimer(Collect,null,Timeout.Infinite,Timeout.Infinite);}publicvoidStart()_timer.Change(0,_intervalMs);publicvoidStop()_timer.Change(Timeout.Infinite,Timeout.Infinite);privatevoidCollect(objectstate){vardatanewHardwareData{CpuUsageGetCpuUsage(),MemoryUsedMbGetMemoryUsed(),MemoryTotalMbGetMemoryTotal(),DiskUsageGetDiskUsage(),NetworkSentKBpsGetNetworkSent(),NetworkReceivedKBpsGetNetworkReceived(),TemperatureGetCpuTemperature()};OnDataUpdated?.Invoke(data);}#regionCPUprivatefloatGetCpuUsage(){usingvarcpunewPerformanceCounter(Processor,% Processor Time,_Total);cpu.NextValue();Thread.Sleep(100);returncpu.NextValue();}#endregion#regionMemoryprivatefloatGetMemoryUsed(){usingvarmemnewPerformanceCounter(Memory,Committed Bytes);returnmem.NextValue()/1024/1024;}privatefloatGetMemoryTotal(){usingvarmemnewPerformanceCounter(Memory,Commit Limit);returnmem.NextValue()/1024/1024;}#endregion#regionDiskprivatefloatGetDiskUsage(){usingvardisknewPerformanceCounter(PhysicalDisk,% Disk Time,_Total);disk.NextValue();Thread.Sleep(100);returndisk.NextValue();}#endregion#regionNetworkprivatefloatGetNetworkSent(){usingvarnetnewPerformanceCounter(Network Interface,Bytes Sent/sec,GetNetworkCard());returnnet.NextValue()/1024;}privatefloatGetNetworkReceived(){usingvarnetnewPerformanceCounter(Network Interface,Bytes Received/sec,GetNetworkCard());returnnet.NextValue()/1024;}privatestringGetNetworkCard(){usingvarsearchernewManagementObjectSearcher(SELECT Name FROM Win32_NetworkAdapter WHERE NetEnabled true);foreach(ManagementObjectobjinsearcher.Get())returnobj[Name].ToString();return;}#endregion#regionTemperature(WMI)privatefloatGetCpuTemperature(){try{usingvarsearchernewManagementObjectSearcher(root\WMI,SELECT CurrentTemperature FROM MSAcpi_ThermalZoneTemperature);foreach(ManagementObjectobjinsearcher.Get()){vartempConvert.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.xamlWindowx:ClassHardwareMonitor.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationTitle硬件实时监控Height320Width400StackPanelMargin20TextBlockTextCPU 使用率FontWeightBold/ProgressBarx:NameCpuBarHeight20Maximum100/TextBlockx:NameCpuText/TextBlockText内存使用FontWeightBoldMargin0,10,0,0/ProgressBarx:NameMemBarHeight20Maximum100/TextBlockx:NameMemText/TextBlockText硬盘使用FontWeightBoldMargin0,10,0,0/ProgressBarx:NameDiskBarHeight20Maximum100/TextBlockTextCPU 温度FontWeightBoldMargin0,10,0,0/TextBlockx:NameTempTextFontSize16ForegroundRed//StackPanel/Window3.2 MainWindow.xaml.csusingSystem.Windows;namespaceHardwareMonitor{publicpartialclassMainWindow:Window{privatereadonlyHardwareMonitor_monitor;publicMainWindow(){InitializeComponent();_monitornewHardwareMonitor(1000);_monitor.OnDataUpdatedUpdateUI;_monitor.Start();}privatevoidUpdateUI(HardwareDatadata){Dispatcher.Invoke((){CpuBar.Valuedata.CpuUsage;CpuText.Text${data.CpuUsage:F1}%;MemBar.Valuedata.MemoryUsedMb/data.MemoryTotalMb*100;MemText.Text${data.MemoryUsedMb:F0}MB /{data.MemoryTotalMb:F0}MB;DiskBar.Valuedata.DiskUsage;TempText.Text${data.Temperature:F1}℃;});}}}参考代码 C# 实时查看 硬件使用率(CPU/内存/硬盘等)www.youwenfan.com/contentcsu/62418.html四、远程设备监控4.1 通过 WMI 监控远程 Windows 设备publicstaticfloatGetRemoteCpuUsage(stringip,stringuser,stringpwd){varoptionsnewConnectionOptions{Usernameuser,Passwordpwd,ImpersonationImpersonationLevel.Impersonate};varscopenewManagementScope($\\\\{ip}\\root\\cimv2,options);scope.Connect();usingvarsearchernewManagementObjectSearcher(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-hpublicstaticfloatGetLinuxCpuUsage(){varcpuFile.ReadAllText(/proc/stat).Split(\n)[0];returnParseCpu(cpu);}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2607293.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!