新闻中心

C#怎么获取CPU和内存使用率 C# PerformanceCounter类的使用

2025-11-25
浏览次数:
返回列表
使用PerformanceCounter类可获取CPU和内存使用率。1. CPU使用率通过"Processor", "% Processor Time", "_Total"计数器获取,需调用NextValue()两次并间隔500ms;2. 内存使用率通过"Memory", "Available MBytes"获取可用内存,结合WMI查询Win32_OperatingSystem得到总内存,计算已用比例;3. 注意权限、命名准确性、资源释放及调用间隔,适合系统监控与性能分析。

c#怎么获取cpu和内存使用率 c# performancecounter类的使用

C#中获取CPU和内存使用率最常用的方式是使用 PerformanceCounter 类,它位于 System.Diagnostics 命名空间下,可以方便地读取系统性能计数器数据。

1. 获取CPU使用率

要获取CPU使用率,需要创建一个类型为 "Processor" 的 PerformanceCounter,并监控其百分比处理器时间。

通常使用 "_Total" 实例来获取所有CPU核心的总体使用率。

  • 类别名:Processor
  • 计数器名:% Processor Time
  • 实例名:_Total(表示所有核心合计)

示例代码:

using System;
using System.Diagnostics;
<p>class Program
{
static void Main()
{
using (var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"))
{
// 第一次调用返回0,需等待或调用NextValue()预热
float cpuUsage = cpuCounter.NextValue();
System.Threading.Thread.Sleep(500); // 等待500毫秒
cpuUsage = cpuCounter.NextValue();  // 获取真实值</p><pre class="brush:php;toolbar:false;">        Console.WriteLine($"CPU使用率: {cpuUsage:F2}%");
    }
}

}

注意: PerformanceCounter 的 NextValue() 方法首次调用会返回0,必须调用两次才能获得有效数据。建议间隔几百毫秒。

2. 获取内存使用率

获取内存使用情况通常通过监控“可用内存”或“已用内存”,然后计算使用率。

美图云修 美图云修

商业级AI影像处理工具

美图云修 50 查看详情 美图云修

常用的是 "Memory" 类别下的 "Available MBytes" 计数器,再结合总内存计算已使用比例。

  • 类别名:Memory
  • 计数器名:Available MBytes(可用内存,单位MB)

示例代码:

using System;
using System.Diagnostics;
using System.Management; // 需要引用 System.Management
<p>class Program
{
static void Main()
{
// 获取可用内存
using (var memoryCounter = new PerformanceCounter("Memory", "Available MBytes", ""))
{
float *ailableMBytes = memoryCounter.NextValue();
long totalMemory = GetTotalPhysicalMemory(); // 获取总内存(MB)
float usedMemory = totalMemory - *ailableMBytes;
float memoryUsageRate = (usedMemory / totalMemory) * 100;</p><pre class="brush:php;toolbar:false;">        Console.WriteLine($"内存使用率: {memoryUsageRate:F2}%");
        Console.WriteLine($"总内存: {totalMemory} MB");
        Console.WriteLine($"可用内存: {*ailableMBytes} MB");
    }
}

// 使用 WMI 获取总物理内存(单位:MB)
static long GetTotalPhysicalMemory()
{
    using (var mos = new ManagementObjectSearcher("SELECT TotalVisibleMemorySize FROM Win32_OperatingSystem"))
    {
        foreach (ManagementObject mo in mos.Get())
        {
            // 返回的是KB,转换为MB
            return (long)(Convert.ToUInt64(mo["TotalVisibleMemorySize"]) / 1024);
        }
    }
    return 0;
}

}

说明: PerformanceCounter 只能获取“可用内存”,无法直接获取“总内存”,所以需要借助 WMI(Win32_OperatingSystem)来获取系统总物理内存。

3. 注意事项与优化建议

使用 PerformanceCounter 时需要注意以下几点:

  • 权限问题:在某些系统或环境下可能需要管理员权限。
  • 计数器名称区分大小写:尽量使用标准名称,避免拼写错误。
  • 资源释放:建议使用 using 语句确保 PerformanceCounter 被正确释放。
  • 多实例监控:如需监控单个CPU核心,可枚举 "Processor" 类别的所有实例(如 "0", "1" 等)。
  • 性能影响:频繁调用 NextValue() 不会影响性能,但建议间隔不低于500ms。

基本上就这些。PerformanceCounter 是C#中获取系统资源使用情况最直接、稳定的方法,适合开发监控工具或性能分析程序。

以上就是C#怎么获取CPU和内存使用率 C# PerformanceCounter类的使用的详细内容,更多请关注其它相关文章!


# cpu内存使用率  # 新产品推广营销方法  # 淘宝测关键词排名软件  # 布丁酒店营销推广方案  # 山东企业seo平台官网  # seo教程书籍分类  # 濮阳汝州全平台营销推广  # 要注意  # 相关文章  # 首次  # 迭代  # 已用  # 两次  # 的是  # 如何使用  # 美图  # 遍历  # win  # ai  # 工具  # 处理器  # c#  # 建设跨境电商网站  # 克东性能提升关键词排名  # 更合网站建设知识  # 网站设计与优化费用 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 将JSON对象数组转置为键值对列表的实用指南  J*aScript教程:根据元素文本内容动态设置背景色  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  微信网页版官方入口直达 微信网页版网页版登录使用方法  生成rdflib自定义SPARQL函数:参数匹配与实践指南  大麦的“候补”是什么意思 大麦候补购票规则【详解】  Lar*el 递归关系中排除指定分支的教程  qq游戏免费畅玩入口_qq游戏电脑版快速启动  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  python3时间如何用calendar输出?  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  漫蛙漫画网页端入口 漫蛙2官方正版漫画站点  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  Win11怎么开启高性能模式_Windows 11电源计划优化设置  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  深入理解J*aScript中的B样条曲线与节点向量生成  CSS子选择器:如何区分并样式化嵌套列表的子层级  如何提高微信支付的安全性_微信支付安全防护与设置建议  iwriter统一登录平台 iwrite账号密码登录页面  免费抖音短视频入口_抖音网页版短视频免费通道  poki网页游戏推荐_poki免费游戏平台入口  C++ map遍历方法大全_C++ map迭代器使用总结  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  Go语言中JSON数据解析与字段访问教程  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  Python大型XML文件高效流式解析教程  Win11怎么查看电脑配置_Win11硬件配置检测工具使用  基于动态规划的房屋花卉种植最小成本算法详解  解决Tabulator日期时间排序问题的专业指南  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理  Tabulator表格中精确实现日期时间排序的指南  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  Centos/Linux 系统下安装 composer 的完整步骤  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  Golang如何使用context实现超时取消_Golang context超时取消模式实践  必由学登录入口 必由学官方网站在线访问链接  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  必由学官方平台入口 必由学在线课堂登录地址  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航 

搜索