c#获取电脑运行状态(cpu,内存,网络,系统运行时间)
public class DeviceMonitor { /// <summary> /// % Processor Time 是所有进程线程使用处理器执行指令所花的时间百分比。指令是计算机执行的基础单位。线程是执行指令的对象,进程是程序运行时创建的对象。此计数包括处理某些硬件间隔和陷阱条件所执行的代码。 /// </summary> private static readonly PerformanceCounter CpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); /// <summary> /// Available MBytes 指能立刻分配给一个进程或系统使用的物理内存数量,以 MB 为单位表示。它等于分配给待机(缓存的)、空闲和零分页列表内存的总和。 /// </summary> private static readonly PerformanceCounter RamCounter = new PerformanceCounter("Memory", "Available MBytes"); /// <summary> /// System Up Time 指计算机自上次启动后已经运行的时间(以秒计)。此计数器显示启动时间和当前时间之差。 /// </summary> private static readonly PerformanceCounter Uptime = new PerformanceCounter("System", "System Up Time"); /// <summary> /// 开机时间 /// </summary> /// <returns></returns> public static TimeSpan GetSystemUpTime() { Uptime.NextValue(); var ts = TimeSpan.FromSeconds(Uptime.NextValue()); return ts; } /// <summary> /// CPU /// </summary> /// <returns></returns> public static string GetCurrentCpuUsage() { return CpuCounter.NextValue() + "%"; } /// <summary> /// 内存 /// </summary> /// <returns></returns> public static string GetAvailableRam() { return RamCounter.NextValue() + "MB"; } /// <summary> /// 线程数 /// </summary> /// <param name="processName"></param> /// <returns></returns> public static int GetThreadCount(string processName) { var ps = Process.GetProcessesByName(processName).FirstOrDefault(); if (ps != null) { return ps.Threads.Count; } return -1; } /// <summary> /// 程序占用内存 /// </summary> /// <param name="processName"></param> /// <returns></returns> public static string MemoryUsingByApp(string processName) { var ps = Process.GetProcessesByName(processName).FirstOrDefault(); if (ps != null) { return GetDisplayByteSize(ps.WorkingSet64, 3); } return "--"; } /// <summary> /// 所有网络状态 /// </summary> /// <returns></returns> public static string GetAllNetworkStatus() { var allNetStatus = ""; var allNet = NetworkInterface.GetAllNetworkInterfaces(); foreach (var i in allNet) { allNetStatus += " name=" + i.Name + ",type=" + i.NetworkInterfaceType + ",status=" + i.OperationalStatus + "\r\n"; } return allNetStatus; } /// <summary> /// 某程序cpu占用 /// </summary> /// <param name="processName"></param> /// <returns></returns> public static object GetCpuUsageByProcessName(string processName) { var ct = new PerformanceCounter("Process", "% Processor Time", processName); var cpu = ct.NextValue(); ct.Dispose(); return cpu; } /// <summary> /// 磁盘控件 /// </summary> /// <param name="processName"></param> /// <returns></returns> public static string GetHddSpace(string processName) { var ps = Process.GetProcessesByName(processName).FirstOrDefault(); if (ps == null) { return "-"; } //var fn = ps.MainModule.FileName; var str = "-"; foreach (var drive in DriveInfo.GetDrives()) { //判断是否是固定磁盘 //if (drive.Name == Path.GetPathRoot(fn)) //{ str += $"{drive.Name}可用{GetDisplayByteSize(drive.AvailableFreeSpace)}(总{GetDisplayByteSize(drive.TotalSize)})\r\n"; //} } return str; } /// <summary> /// level=0==G /// level=1==MB /// level=2==Kb /// level=3==B /// </summary> /// <param name="byteSize"></param> /// <param name="stopLevel"></param> /// <returns></returns> private static string GetDisplayByteSize(long byteSize, int stopLevel = 1) { if (byteSize >= 1024 * 1024 * 1024) { var remain = byteSize % (1024 * 1024 * 1024); return byteSize / (1024 * 1024 * 1024) + "G " + (stopLevel >= 1 ? GetDisplayByteSize(remain) : ""); } if (byteSize >= 1024 * 1024) { var remain = byteSize % (1024 * 1024); return byteSize / (1024 * 1024) + "M " + (stopLevel >= 2 ? GetDisplayByteSize(remain) : ""); } if (byteSize >= 1024) { var remain = byteSize % 1024; return byteSize / 1024 + "K " + (stopLevel >= 3 ? GetDisplayByteSize(remain) : ""); } if (stopLevel > 3) { return byteSize + "B "; } return ""; } }
显示:
var processName = Process.GetCurrentProcess().ProcessName;
var upTime = DeviceMonitor.GetSystemUpTime();
var cpu = DeviceMonitor.GetCurrentCpuUsage();
var ram = DeviceMonitor.GetAvailableRam();
var net = DeviceMonitor.GetAllNetworkStatus();
var processCpu = DeviceMonitor.GetCpuUsageByProcessName(processName);
var processMem = DeviceMonitor.MemoryUsingByApp(processName);
var threadCt = DeviceMonitor.GetThreadCount(processName);
var hdd = DeviceMonitor.GetHddSpace(processName);
var currentStatus =
$"总CPU占用率={cpu},\r\n" +
$"{processName}占用的CUP={processCpu},\r\n" +
$"空闲可用内存={ram},\r\n" +
$"{processName}占用内存={processMem},\r\n" +
$"{processName}占用线程数={threadCt},\r\n" +
$"开机时间={upTime},\r\n" +
$"网络={net},\r\n" +
$"磁盘={hdd}";
Console.WriteLine(currentStatus);
Console.Read();
效果:
老版源码地址:https://files.cnblogs.com/files/lizhijian/2021-01-05-%E8%8E%B7%E5%8F%96%E7%94%B5%E8%84%91%E7%8A%B6%E6%80%81.rar
更新2022-04-27-:https://files.cnblogs.com/files/congqiandehoulai/2022-04-27-CSharp%E7%9B%91%E6%8E%A7%E7%94%B5%E8%84%91%E7%8A%B6%E6%80%81.rar