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

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)
                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;