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

posted @ 2018-08-09 20:11  灰主流  阅读(3358)  评论(5编辑  收藏  举报