如何用C#实时获取CPU利用率

匿名 (未验证) 提交于 2019-12-03 00:05:01

获取内存使用率

方式1:

using System; using System.Runtime.InteropServices;  namespace ConsoleApp1 {     public class Class1     {         static void Main(string[] args)         {             Console.WriteLine("总内存:" + FormatSize(GetTotalPhys()));             Console.WriteLine("已使用:" + FormatSize(GetUsedPhys()));             Console.WriteLine("可使用:" + FormatSize(GetAvailPhys()));             Console.ReadKey();         }          #region 获得内存信息API         [DllImport("kernel32.dll")]         [return: MarshalAs(UnmanagedType.Bool)]         public static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi);          //定义内存的信息结构         [StructLayout(LayoutKind.Sequential)]         public struct MEMORY_INFO         {             public uint dwLength; //当前结构体大小             public uint dwMemoryLoad; //当前内存使用率             public ulong ullTotalPhys; //总计物理内存大小             public ulong ullAvailPhys; //可用物理内存大小             public ulong ullTotalPageFile; //总计交换文件大小             public ulong ullAvailPageFile; //总计交换文件大小             public ulong ullTotalVirtual; //总计虚拟内存大小             public ulong ullAvailVirtual; //可用虚拟内存大小             public ulong ullAvailExtendedVirtual; //保留 这个值始终为0         }         #endregion          #region 格式化容量大小         /// <summary>         /// 格式化容量大小         /// </summary>         /// <param name="size">容量(B)</param>         /// <returns>已格式化的容量</returns>         private static string FormatSize(double size)         {             double d = (double)size;             int i = 0;             while ((d > 1024) && (i < 5))             {                 d /= 1024;                 i++;             }             string[] unit = { "B", "KB", "MB", "GB", "TB" };             return (string.Format("{0} {1}", Math.Round(d, 2), unit[i]));         }         #endregion          #region 获得当前内存使用情况         /// <summary>         /// 获得当前内存使用情况         /// </summary>         /// <returns></returns>         public static MEMORY_INFO GetMemoryStatus()         {             MEMORY_INFO mi = new MEMORY_INFO();             mi.dwLength = (uint)System.Runtime.InteropServices.Marshal.SizeOf(mi);             GlobalMemoryStatusEx(ref mi);             return mi;         }         #endregion          #region 获得当前可用物理内存大小         /// <summary>         /// 获得当前可用物理内存大小         /// </summary>         /// <returns>当前可用物理内存(B)</returns>         public static ulong GetAvailPhys()         {             MEMORY_INFO mi = GetMemoryStatus();             return mi.ullAvailPhys;         }         #endregion          #region 获得当前已使用的内存大小         /// <summary>         /// 获得当前已使用的内存大小         /// </summary>         /// <returns>已使用的内存大小(B)</returns>         public static ulong GetUsedPhys()         {             MEMORY_INFO mi = GetMemoryStatus();             return (mi.ullTotalPhys - mi.ullAvailPhys);         }         #endregion          #region 获得当前总计物理内存大小         /// <summary>         /// 获得当前总计物理内存大小         /// </summary>         /// <returns&amp;gt;总计物理内存大小(B)&amp;lt;/returns&amp;gt;         public static ulong GetTotalPhys()         {             MEMORY_INFO mi = GetMemoryStatus();             return mi.ullTotalPhys;         }         #endregion     } }
View Code

备注:需要添加 System.Management 的引用

using System; using System.Management;  namespace ConsoleApp1 {     public class Class1     {         static void Main(string[] args)         {             //需要添加 System.Management 的引用               //获取总物理内存大小             ManagementClass cimobject1 = new ManagementClass("Win32_PhysicalMemory");             ManagementObjectCollection moc1 = cimobject1.GetInstances();             double available=0, capacity=0;             foreach (ManagementObject mo1 in moc1)             {                 capacity += ((Math.Round(Int64.Parse(mo1.Properties["Capacity"].Value.ToString()) / 1024 / 1024 / 1024.0, 1)));             }             moc1.Dispose();             cimobject1.Dispose();               //获取内存可用大小             ManagementClass cimobject2 = new ManagementClass("Win32_PerfFormattedData_PerfOS_Memory");             ManagementObjectCollection moc2 = cimobject2.GetInstances();             foreach (ManagementObject mo2 in moc2)             {                 available += ((Math.Round(Int64.Parse(mo2.Properties["AvailableMBytes"].Value.ToString()) / 1024.0, 1)));              }             moc2.Dispose();             cimobject2.Dispose();              Console.WriteLine("总内存=" + capacity.ToString() + "G");             Console.WriteLine("可使用=" + available.ToString() + "G");             Console.WriteLine("已使用=" + ((capacity - available)).ToString() + "G," + (Math.Round((capacity - available) / capacity * 100, 0)).ToString() + "%");             Console.ReadKey();         }     } }
View Code

获取CPU使用率

using System; using System.Diagnostics;  namespace ConsoleApp1 {     public class Class1     {         static void Main(string[] args)         {             PerformanceCounter cpuCounter;             PerformanceCounter ramCounter;              cpuCounter = new PerformanceCounter();             cpuCounter.CategoryName = "Processor";             cpuCounter.CounterName = "% Processor Time";             cpuCounter.InstanceName = "_Total";             cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");             ramCounter = new PerformanceCounter("Memory", "Available MBytes");                Console.WriteLine("电脑CPU使用率:" + cpuCounter.NextValue() + "%");             Console.WriteLine("电脑可使用内存:" + ramCounter.NextValue() + "MB");             Console.WriteLine();                while (true)             {                 System.Threading.Thread.Sleep(1000);                 Console.WriteLine("电脑CPU使用率:" + cpuCounter.NextValue() + " %");                 Console.WriteLine("电脑可使用内存:" + ramCounter.NextValue() + "MB");                 Console.WriteLine();                  if ((int)cpuCounter.NextValue() > 80)                 {                     System.Threading.Thread.Sleep(1000 * 60);                 }             }         }     } }
View Code

相关链接 :

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!