发现没有太好用的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;
}
}
}