Visual Studio2022 Profile 工具使用

本篇研究下Visual Studio自带的性能分析工具,针对C++代码,基于Visual Studio2022


文章目录


CPU使用率

对于CPU密集型程序,我们可以通过分析程序的CPU使用率,找到程序的瓶颈,Visual Studio原生提供了对于CPU使用情况的诊断工具,具体使用方法如下:

  1. 在 Visual Studio 里打开我们的程序,在我们想分析的函数/代码块的起始位置和结束位置打上断点,比如这里我们想分析的是 getSum() 这个函数。

  2. 调试状态下运行我们的程序,然后打开诊断工具 窗口(调试>窗口>显示诊断工具)

  3. 之后可以在诊断工具里,设置选择工具,选择是否查看 CPU使用率和内存使用

  4. 当程序运行到一个断点时,打开CPU 使用率下的记录 CPU 配置文件 ,之后就会开始记录CPU使用情况

  5. 继续执行我们的代码,然后程序运行到我们的第二个断点处,这是点开CPU使用率,就可以看到CPU使用率相关的信息了。

    (1)CPU 总计 :表示该函数函数体和调用的其他函数的总的CPU计数,及占比

    (2)自CPU :表示该函数函数体本身的CPU计数,及占比

    (3)排名靠前的函数 :按自CPU计数从大到小排列,这里 func1 函数自CPU 5152(99.52%)

    (4)热路径 :CPU计数最大部分的调用树,上面可以看到是 getSum 中调用了 func1

  6. 这里可以打开CPU 使用率的详细信息窗口,或者点击上面图中任意函数,导航到对应位置,这里视图默认显示是调用树,下面代码中会在左侧显示每一行代码的CPU计数。

  7. 我们可以选择视图为调用方/被调用方 ,选择对应的函数,当前函数就是我们选择的函数,可以看到调用函数 就是调用当前函数的函数,调用的函数 就是当前函数调用到的一些函数

  8. 也可以选择火焰图 视图


检测

上面的CPU使用率是通过采样的方式得到,定时去检查CPU的调用堆栈,好处是不会产生大的开销,而检测是通过工具将代码注入到可捕获计时信息的二进制文件中,或通过使用hook在应用程序运行期间收集和发出精确计时和调用计数信息。相对于采样的方式,检测方法开销较大,但检测可提供更确切的调用计数和精确计时。

Visual Studio也提供了原生的检测工具,但对C++程序只能进行静态检测,具体步骤如下:

  1. 首先编译好的目标文件,在链接时需要加上 -PROFILE 选项
  2. 调试 > 性能探查器,打开性能探查器
    .
  3. 首先选择目标,这里选择启动项目 ,也可以选择链接好的可执行文件,选择检测 选项,点击开始。
  4. 等程序运行结束或手动停止检测就会输出包含函数计时的报告
  5. 添加用户标记,这个功能目前还有问题,见下图,等修复好了更新

参考资料

通过分析 CPU 使用情况衡量应用程序性能(C#、Visual Basic、C++、F#)
了解探查器性能收集方法
在 Visual Studio(C#、C++、Visual Basic、F#)中检测 .NET 应用程序

相关推荐
我不是懒洋洋13 天前
【C++】string(string的成员变量、auto和范围for、string常用接口的说明、OJ题目、string的模拟实现)
c语言·开发语言·c++·visual studio
C++ 老炮儿的技术栈13 天前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
A.零点14 天前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio
彷徨而立14 天前
【VS2026】介绍 Visual Studio 几个重要配置项
visual studio
AndyHuang197614 天前
【避坑指南】Visual Studio 插件报错 “Windows Terminal (wt.exe) was not found in PATH“ 完美解决
ide·windows·visual studio
彷徨而立14 天前
【Visual Studio】msbuild 使用举例
ide·visual studio
blueman888815 天前
VS2022 切换定义(F12 / Go to Definition)反应慢
c++·visual studio
周杰伦fans15 天前
记一次 Visual Studio 突然报错“未能加载 Microsoft.Internal.VisualStudio.Interop”的奇葩经历
microsoft·log4j·visual studio
x1387028595715 天前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
robot_???17 天前
Visual studio2022:找不到指定的SDK“Microsoft.NET.Sdk”
microsoft·.net·visual studio