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


使用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. 获取内存使用率

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

NoCode NoCode

美团推出的零代码应用生成平台

NoCode 180 查看详情 NoCode

常用的是 "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外包  # 要注意  # 相关文章  # 首次  # 已用  # 开源  # 如何处理  # 两次  # c#  # 处理器  # 工具  # ai  # win  # 死锁  # 的是  # 如何使用  # 修文整合营销推广  # 长沙seo优化关键词  # seo公司就帮火星12  # 安徽网站建设工作  # 滕州seo公司  # 阿里网页设计网站建设  # 什么是seo加权分数  # 新余网站制作建设 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: iPhone14无法连接蓝牙设备如何解决  英雄联盟争者留名活动介绍  如何在mysql中比较InnoDB和MyISAM区别  J*aScript实现网页表单实时输入字段比较与验证教程  126手机126邮箱登录_126邮箱手机登录入口官网  163邮箱网页版官方登录入口 163邮箱网页版访问页面  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  解决C#跨线程访问XML对象的异常 安全的并发XML处理模式  如何在CSS中设置背景图像:一个全面指南  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  123平台官方登录入口 123邮箱网页端在线沟通工具  无人机考证官网 中国民航无人机考证官网登录入口  如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?  鲁班大师乓乓皮肤获取方法  《花瓣》创建专辑方法  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  Win10输入法不见了怎么办 Win10找回语言栏图标教程  我居然低估了 DeepSeek,这次更新它做到了这些!  QQ网站入口直接登录 QQ官方正版登录页面  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  优化Flask模板中SQLAlchemy查询迭代标签:处理字符串空格问题  如何在Golang中处理表单文件上传_Golang 表单文件上传示例  电脑视频号|直播|如何分享屏幕  天堂漫画网页版在线阅读 天堂漫画手机版入口  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  如何定制PrimeNG Sidebar的背景颜色  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  招商淘客入门指南  《广发易淘金》国债逆回购操作教程  房产|直播|视频号怎么认证开通?|直播|需要什么资质?  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  lol小红书怎么|直播|?lol小红书|直播|是什么意思?  百度网盘如何设置上传限额  顺丰快递单号查询寄件人 顺丰寄件人查询入口  使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式  mysql如何限制远程访问_mysql远程访问限制方法  如何测试您的网站全球打开速度-网站海外测速工  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  《一起考教师》账号注销方法  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  iPhone14开启Apple TV遥控设置  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  《糖豆》添加舞曲方法  Symfony路由参数转换器:实体存在性验证与错误处理策略  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  windows10怎么开启wsl_windows10安装linux子系统教程  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析 

 2025-11-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.