.Net CPU平均使用率统计 内存占用率显示

发现没有太好用的CPU使用率统计软件,所以自己写一个吧,简单有有效

代码下载地址

https://download.csdn.net/download/g313105910/22173021

代码比较简单直接上了,官网的示例在这个链接里

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-perfrawdata

using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace SystemInfo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                List<double> cpuMeans = new List<double>();
                List<double> memoryMeans = new List<double>();
                List<double> cpuMeanToMeans = new List<double>();
                var obj = new ManagementObjectSearcher("select * from Win32_PhysicalMemory");
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");

                double physicalMemory = GetPhysicalMemory();
                while (true)
                {
                    #region cpu
                    var cpuTimes = searcher.Get()
                        .Cast<ManagementObject>()
                        .Select(mo => new
                        {
                            Name = mo["Name"],
                            Usage = mo["PercentProcessorTime"]
                        }
                        )
                        .ToList();
                    var query = cpuTimes.Where(x => x.Name.ToString() == "_Total").Select(x => x.Usage);
                    cpuMeans.Add(double.Parse((query.SingleOrDefault().ToString())));
                    double mean = cpuMeans.Sum() / cpuMeans.Count();
                    #endregion

                    #region memory

                    ObjectQuery objectQueryUseTotalMemory = new ObjectQuery("select * from Win32_PerfRawData_PerfOS_Memory");
                    ManagementObjectSearcher searcherUseTotalMemory = new ManagementObjectSearcher(objectQueryUseTotalMemory);

                    memoryMeans.Add(GetUseTotalMemoryPercentage(physicalMemory, searcherUseTotalMemory));
                    var memoryMean = memoryMeans.Sum() / memoryMeans.Count();
                    #endregion

                    if (cpuMeans.Count() > 120)
                    {
                        cpuMeanToMeans.Add(mean);
                        cpuMeans.RemoveAt(0);
                    }
                    if(cpuMeanToMeans.Count() > 120)
                    {
                        Console.WriteLine("\r\n测试结果:平均cpu使用率:" + (cpuMeanToMeans.Sum()/ cpuMeanToMeans.Count()).ToString("F2") + "%" + " 平均内存使用率:" + memoryMean.ToString("F2") + "%\r\n");
                        break;
                    }
                    Console.WriteLine("当前cpu使用率:" + query.SingleOrDefault().ToString() + "%" + " 平均cpu使用率:" + (mean).ToString("F2") + "%" + " 平均内存使用率:" + memoryMean.ToString("F2") + "%" + " count:"+ cpuMeans.Count().ToString() + " meanCount:" + cpuMeanToMeans.Count().ToString());
                    Thread.Sleep(500);
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        public static double GetUseTotalMemoryPercentage(double physicalMemory, ManagementObjectSearcher searcherUseTotalMemory)
        {
            double useTotalMemoryPercentage = ((physicalMemory - GetUseTotalMemory(searcherUseTotalMemory)) / physicalMemory) * 100;
            return useTotalMemoryPercentage;
        }

        public static double GetUseTotalMemory(ManagementObjectSearcher searcherUseTotalMemory)
        {
            double totalCapacity = 0;
            ManagementObjectCollection vals = searcherUseTotalMemory.Get();
            foreach (ManagementObject val in vals)
            {
                totalCapacity += System.Convert.ToDouble(val.GetPropertyValue("Availablebytes"));
            }
            double ramCapacity = totalCapacity / 1048576;
            return ramCapacity;
        }

        public static double GetPhysicalMemory()
        {
            double totalCapacity = 0;
            ObjectQuery objectQueryPhysicalMemory = new ObjectQuery("select * from Win32_PhysicalMemory");
            ManagementObjectSearcher searcherPhysicalMemory = new ManagementObjectSearcher(objectQueryPhysicalMemory);
            ManagementObjectCollection vals = searcherPhysicalMemory.Get();
            foreach (ManagementObject val in vals)
            {
                totalCapacity += System.Convert.ToDouble(val.GetPropertyValue("Capacity"));
            }
            double ramCapacity = totalCapacity / 1048576;
            return ramCapacity;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开花落的个人博客

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值