当前位置: 首页 > 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.jsqmd.com/news/41940/

相关文章:

  • 详细介绍:Linux Bash(一)
  • 做一个简单的贪吃蛇游戏
  • pytest测试range内置函数
  • WPS---功能设置
  • 自动化测大样例
  • [Debug记录] 分布式实验-FTP编程
  • 2025年当下行业内知名的旧房翻新企业排名与推荐
  • 2025年国内旧房翻新公司综合实力排行榜TOP10推荐
  • 现今国内口碑好的旧房翻新企业排行
  • Linux服务器编程实践60-双向管道:socketpair函数的完成与应用场景
  • 前端从0到1实战】第3篇:拒绝插件,手写一个原生模态弹窗 (Modal)
  • 20232413 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 循环数组下一个更大元素:从错误到精通(含2种解法+同类型扩展)
  • 实验四运行结果
  • 随机化数论算法总结
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 完整教程:【数据迁移】HBase Bulkload批量加载原理
  • 【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体? - 详解
  • 20232422 龙浩然 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • DL 1 深度学习简介 张量tensor操作
  • Spring Cloud Alibaba + RocketMQ
  • bpftrace报错:definitions.h:17:3: error: unknown type name pid_t
  • mybatis_generator
  • 目前市场口碑好的平移门服务商
  • [AGC030F]Permutation and Minimum
  • 2025年安徽伸缩门公司哪家权威:十大品牌综合评测
  • 脑机接口
  • 2025年11月阜阳伸缩门供应厂家有哪些
  • 【案例实战】多维度视角:鸿蒙2048游戏开发的深度分析与感悟 - 详解
  • 2025跨境物流/运输公司推荐:中亚/俄罗斯/阿富汗等线路最新top5口碑推荐