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

news/2025/11/16 16:11:20/文章来源:https://www.cnblogs.com/shanfeng1000/p/19228365

  接上一篇: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.mzph.cn/news/967167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:Linux Bash(一)

详细介绍:Linux Bash(一)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

做一个简单的贪吃蛇游戏

简单 C++ 贪吃蛇游戏(控制台版) 基于控制台实现的贪吃蛇游戏,核心功能包括:方向控制、食物生成、碰撞检测、分数统计,适合新手学习循环、数组、逻辑控制的实战案例。 开发环境 编译器:支持 C++11 及以上(Dev-C+…

pytest测试range内置函数

pytest测试range内置函数点击查看代码 import pytest# ------------------------------ # 一、基础操作:正序序列测试用例 # ------------------------------ @pytest.mark.parametrize("start, end, step, expe…

WPS---功能设置

WPS作为一款国内开发的办公软件,用确实好用,但是恶心也确实挺恶心的,就比如这个必须登录才能使用的功能,简直就是反人类。 操作:点击【登录】旁边的【设置】选择【配置和修复工具】然后点击【高级】功能定制:关闭…

自动化测大样例

省流: for((i=1;i<=10;i++)) do g++ T1.cpp -std=c++14 -Wall -Wextra -O a.exe cp ex_edit$i.in edit.in ./a.exe diff -s -Z ex_edit$i.ans edit.out done#include<bits/stdc++.h> #include <unistd.h&…

[Debug记录] 分布式实验-FTP编程

分布式课程学习JavaSocket和TCP/UDP,第一次实验要求基于Java Socket TCP和UDP实现一个简易的网络文件服务程序,包含服务器端FileServer和客户端FileClient。完成实验的过程中遇到一些比较典型的bug,记录一下。 用来…

2025年当下行业内知名的旧房翻新企业排名与推荐

摘要 旧房翻新行业在2025年迎来快速发展,受城市化进程加速和住房老龄化影响,市场需求持续增长,预计年增长率达15%以上(数据来源:中国建筑装饰协会2025年报告)。本文基于行业调研、用户口碑和专业技术评估,精选排…

2025年国内旧房翻新公司综合实力排行榜TOP10推荐

摘要 随着城市化进程加速和居民生活品质提升,2025年旧房翻新行业迎来爆发式增长,市场规模预计突破8000亿元。旧房翻新不仅解决老房安全隐患,更是提升居住舒适度和资产价值的重要途径。本文基于企业实力、技术水准、…

现今国内口碑好的旧房翻新企业排行

摘要 随着城市化进程加速和居民生活品质提升,2025年旧房翻新行业迎来爆发式增长。据统计,国内旧房翻新市场规模已突破万亿,年均增长率达18.7%。本文基于用户口碑、施工质量、服务体验等维度,综合评出现今国内十大旧…

Linux服务器编程实践60-双向管道:socketpair函数的完成与应用场景

Linux服务器编程实践60-双向管道:socketpair函数的完成与应用场景pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

前端从0到1实战】第3篇:拒绝插件,手写一个原生模态弹窗 (Modal)

【前端从0到1实战】第3篇:拒绝插件,手写一个原生模态弹窗 (Modal) 在现代 Web 开发中,模态弹窗(Modal)是最常见的交互组件之一。很多新手会选择直接引入第三方插件,但其实手写一个原生 Modal 是理解 HTML 结构定…

20232413 2025-2026-1 《网络与系统攻防技术》实验五实验报告

一.实验内容 1.搜索域名和ip信息 2.获取好友IP地址及其地理位置 3.使用nmap扫描靶机进行漏洞分析 4.查询个人网上信息和学习高级搜索技能 二.实验过程 2.1 DNS 域名信息查询(以baidu.com为例) 2.1.1whois 查询 DNS 注…

循环数组下一个更大元素:从错误到精通(含2种解法+同类型扩展)

循环数组下一个更大元素:从错误到精通(含2种解法+同类型扩展)在字符串、数组类算法中,“循环结构”是高频考点——尤其是“循环数组的下一个更大元素”,既考察对单调栈的理解,又要求处理“绕回开头”的特殊逻辑。…

随机化数论算法总结

好吧这个名字很蠢() 1 Miller_Rabin 作用试判断 \(10^{18}\) 级别或以上的数是否是质数,显然此时 \(O(\sqrt n)\) 的朴素算法是无法使用的。 1.1 费马小定理 当 \(p\) 为质数时,对于任意整数 \(a\),有 \(a^{p-1}\…

20232422 2025-2026-1 《网络与系统攻防技术》实验五实验报告

20232422 龙浩然 2025-2026-1 《网络与系统攻防技术》实验五实验报告一、实验内容DNS信息搜集:查询指定域名的注册信息、对应IP和地理位置。 网络抓包定位:通过Wireshark抓取qq好友IP,解析其地理位置。 靶机扫描探测…

完整教程:【数据迁移】HBase Bulkload批量加载原理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体? - 详解

【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体? - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

20232422 龙浩然 2025-2026-1 《网络与系统攻防技术》实验五实验报告

20232422 龙浩然 2025-2026-1 《网络与系统攻防技术》实验五实验报告一、实验内容DNS信息搜集:查询指定域名的注册信息、对应IP和地理位置。 网络抓包定位:通过Wireshark抓取qq好友IP,解析其地理位置。 靶机扫描探测…

DL 1 深度学习简介 张量tensor操作

DL 1 深度学习简介 张量tensor操作1.深度学习简介 学习视频:https://www.bilibili.com/video/BV1c5yrBcEEX/?spm_id_from=333.337.search-card.all.click&vd_source=0a4fe9884700974ee1043a65993f87fb 1.1 概念…