本篇研究下Visual Studio自带的性能分析工具,针对C++代码,基于Visual Studio2022
文章目录
CPU使用率
对于CPU密集型程序,我们可以通过分析程序的CPU使用率,找到程序的瓶颈,Visual Studio原生提供了对于CPU使用情况的诊断工具,具体使用方法如下:
-
在 Visual Studio 里打开我们的程序,在我们想分析的函数/代码块的起始位置和结束位置打上断点,比如这里我们想分析的是
getSum()
这个函数。
-
调试状态下运行我们的程序,然后打开诊断工具 窗口(调试>窗口>显示诊断工具)
-
之后可以在诊断工具里,设置选择工具,选择是否查看 CPU使用率和内存使用
-
当程序运行到一个断点时,打开CPU 使用率下的记录 CPU 配置文件 ,之后就会开始记录CPU使用情况
-
继续执行我们的代码,然后程序运行到我们的第二个断点处,这是点开CPU使用率,就可以看到CPU使用率相关的信息了。
(1)CPU 总计 :表示该函数函数体和调用的其他函数的总的CPU计数,及占比
(2)自CPU :表示该函数函数体本身的CPU计数,及占比
(3)排名靠前的函数 :按自CPU计数从大到小排列,这里
func1
函数自CPU 5152(99.52%)(4)热路径 :CPU计数最大部分的调用树,上面可以看到是
getSum
中调用了func1
-
这里可以打开CPU 使用率的详细信息窗口,或者点击上面图中任意函数,导航到对应位置,这里视图默认显示是调用树,下面代码中会在左侧显示每一行代码的CPU计数。
-
我们可以选择视图为调用方/被调用方 ,选择对应的函数,当前函数就是我们选择的函数,可以看到调用函数 就是调用当前函数的函数,调用的函数 就是当前函数调用到的一些函数
-
也可以选择火焰图 视图
检测
上面的CPU使用率是通过采样的方式得到,定时去检查CPU的调用堆栈,好处是不会产生大的开销,而检测是通过工具将代码注入到可捕获计时信息的二进制文件中,或通过使用hook在应用程序运行期间收集和发出精确计时和调用计数信息。相对于采样的方式,检测方法开销较大,但检测可提供更确切的调用计数和精确计时。
Visual Studio也提供了原生的检测工具,但对C++程序只能进行静态检测,具体步骤如下:
- 首先编译好的目标文件,在链接时需要加上
-PROFILE
选项 - 调试 > 性能探查器,打开性能探查器
. - 首先选择目标,这里选择启动项目 ,也可以选择链接好的可执行文件,选择检测 选项,点击开始。
- 等程序运行结束或手动停止检测就会输出包含函数计时的报告
- 添加用户标记,这个功能目前还有问题,见下图,等修复好了更新
参考资料
通过分析 CPU 使用情况衡量应用程序性能(C#、Visual Basic、C++、F#)
了解探查器性能收集方法
在 Visual Studio(C#、C++、Visual Basic、F#)中检测 .NET 应用程序