通过VS诊断工具定位软件CPU瓶颈
前情提示:正常情况下我们使用调试模式会看不到诊断工具窗口,控制台会报“无法启动标准收集器。请尝试修复 Visual Studio 的安装。 (HRESULT: 0xe1110002)”这样的错误。
解决方式:通过[Downloads - Visual Studio Subscriptions Portal](https://my.visualstudio.com/Downloads?q=remote tools visual studio 2019) 链接下载对应的版本安装便可以解决。
下面我主要讲解我是如何通过VS诊断工具去定位代码中CPU占用过高的问题。
操作步骤:
1、将代码使用debug方式运行起来;
2、使用“诊断工具”中的“记录CPU配置文件”按钮记录操作软件CPU情况;
3、停止记录分析CPU的占用比例;
如下图:
上图可以清晰的看出除了"外部调用",opencv是占比最大的
通过代码(我们只需双击我们熟悉的接口就行)比如CaptureThread这里的采集线程接口;该接口主要通过使用UWP获取RGB中的视频流,我们双击便可获取到调用堆栈
这里有opencv调用的地方,虽是占比不高但通过阅读代码这里的是调用opencv最主要的入口;我通过分析代码发现在每次取出RGB数据帧时原始格式是NV12,需要使用opencv将NV12转成bgr格式供外部使用;外部一般只有流模式情况下才会使用bgr格式,其他时间这种转化是在浪费CPU。
故而,我优化我们代码逻辑,在流模式时进行转换,在非流模式时不转化,大大降低了非流模式(大部分时间)CPU的使用率。
效果如下:
非流模式下CPU占用非常的低,之前高占用的opencv也不见了。。。。
参考:分析性能探查器中的 CPU 使用情况 - Visual Studio (Windows) | Microsoft Learn