当前位置: 首页 > news >正文

C#性能优化基础:高CPU使用率(trace)

  接上一篇:C#性能优化基础:内存诊断(dump)

  内存说完了,另外一个C#性能优化需要关注的点就是高CPU使用率了,所谓高CPU使用率,其实就是程序在执行大量的计算,这些计算也许是正常的,也可能是异常,比如死循环、多线程密集型执行、大量的并发锁等,这就需要我们能排查这样的问题了。

  假如我们有如下代码:

    public class Program{public static void Main(){var person = new Person(10000000000m);var price = 2m;var totalCount = person.GetQuantity(price);Console.WriteLine("可购买数据:" + totalCount);}}public class Person{public Person(decimal money){Money = money;}public decimal Money { get; set; }public int GetQuantity(decimal price){return Calulate(Money, price);}private int Calulate(decimal totalMoney, decimal price){int totalCount = 0;while (true){totalMoney -= price;if (totalMoney < 0) break;totalCount++;}return totalCount;}}

  这段代码逻辑很简单,也非死循环,我们在linux下去运行这段代码,但是运行后,程序会卡住一段时间,单核使用率接近100%

  image

  为了找到哪段代码执行CPU使用率高,我们可以使用dotnet-trace工具来收集

  去官网下载我们需要的工具:

  下载dotnet-trace:https://learn.microsoft.com/zh-cn/dotnet/core/diagnostics/dotnet-counters

  我们可以直接下载linux下的可执行文件,把它放到dotnet的安装目录即可。(切记,版本需要对应上,如果对不上,命令在执行的时候会相对应的提示需要什么版本

  程序再执行期间,我们也可以通过dotnet-trace命令查看可以收集的进程信息:sudo ./dotnet-trace ps

  image

  然后使用进程ID执行收集命令:sudo ./dotnet-trace collect -p 630274

   image

  收集一段时间后退出,就拿到了nettrace文件,如果我们要查看哪个方法CPU占用最高,只需简单的一行命令即可:

    sudo ./dotnet-trace report demo_20251116_154500.nettrace topN -n 100# demo_20251116_151807.nettrace是生成的文件名# topN -n即输出最高的的前n项

  结果大致如下:

  image

  很明显,图中已经给我指出来了哪个方法有问题了

  

   总结

   就说这么多吧,举例是很简单的,但是生产环境可能就是另外一种情况了,这里我都是采用命令来诊断和查看,现实中,我们往往使用VS工具来诊断查看,这个就不做过多介绍了。

   另外,官网还给出了使用perf收集分析高CPU使用率的方法,个人觉得多数时候使用dotnet-trace就够了.

  对perf感兴趣可以参考下面的地址:https://learn.microsoft.com/en-us/dotnet/core/diagnostics/debug-highcpu?tabs=linux#tabpanel_1_linux

http://www.zskr.cn/news/51301.html

相关文章:

  • 详细介绍:Linux Bash(一)
  • pytest测试range内置函数
  • WPS---功能设置
  • [Debug记录] 分布式实验-FTP编程
  • 2025年国内旧房翻新公司综合实力排行榜TOP10推荐
  • Linux服务器编程实践60-双向管道:socketpair函数的完成与应用场景
  • 循环数组下一个更大元素:从错误到精通(含2种解法+同类型扩展)
  • 实验四运行结果
  • 随机化数论算法总结
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 完整教程:【数据迁移】HBase Bulkload批量加载原理
  • 【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体? - 详解
  • DL 1 深度学习简介 张量tensor操作
  • bpftrace报错:definitions.h:17:3: error: unknown type name pid_t
  • 目前市场口碑好的平移门服务商
  • 2025年11月阜阳伸缩门供应厂家有哪些
  • 【案例实战】多维度视角:鸿蒙2048游戏开发的深度分析与感悟 - 详解
  • 2025年11月载冷剂厂家榜单:性能价格服务综合对比
  • 跨域问题解决方案的弃子——JSONP
  • 2025年11月智能床垫品牌TOP5推荐:服务器系统软件办公集成优化
  • 2025河南郑州锅炉设备/改造/安装/维修最新TOP5推荐:质造升级驱动产业新发展,河南中原地区优选
  • 2025年11月冷媒剂厂家推荐榜:五家主流品牌综合对比与评价
  • 2025年11月防冻液厂家对比榜:五强性能数据与资质验证全记录
  • 心情助手3.07正式版,吃喝镇
  • 在ec2上部署Qwen2.5omini和Qwen3omini模型
  • 2025年第39周数字取证与事件响应技术动态
  • 第三次算法作业
  • milvus: 搜索collection
  • 实用指南:《vector.pdf 深度解读:vector 核心接口、扩容机制与迭代器失效解决方案》
  • 【MX-S11】梦熊 NOIP 2025 模拟赛 3 WAOI R7 FeOI R6.5(同步赛)总结分析