使用Visual Studio性能探查器定位性能瓶颈

  1. 协议

最近在写一个超级轻量的跨设备通讯库,包含RPC(远程函数调用)和DataSet(数据同步),设计上分了三层,最底层是网络通讯层,中间是组包解包层,最上层是功能接口层。写好了初步的一个版本后,单机测试一个4字节变量的同步,发现同步1000次大约需要170ms,远远没有达到理论的网络传输上限。之前一直知道Visual Studio有一个性能工具,但仅限于玩一玩,这次是首次用它来分析性能瓶颈。


首先在调试菜单下启动性能探查器。

PIC1

选择CPU使用率,监视CPU使用率能够得知每个函数的执行耗时,一键开始。

PIC2

程序运行一小会儿后直接关掉,就自动生成分析报告了。

PIC3

重点关注CPU占用率高的函数,一层层点开,发现两次组包占用了46.83%+45.17%=92%的CPU资源,而通讯只占了2.38%。

PIC4

右键查看源可以直接跳到具体的代码处。

PIC5

嘿嘿,既然发现了瓶颈位置,着重优化组包的过程。比如在改变Data值的时候,会触发同步,而同步的组包过程有两次序列化,组包时创建和销毁了两次OutputArchive,如上图,这在序列化中又占了主要的CPU资源开销,我们可以重构组包解包层,通过分段序列化再组合的形式,将两次序列化简化为一次序列化,优化性能。

PIC6

有了这个工具分析过程变得非常简单,不需要遍地打时间戳来测试了,Visual Studio真香…


协议

本文以上内容遵循CC BY-ND 4.0协议,署名-禁止演绎。

转载请注明出处:https://tis.ac.cn/blog/kongdeyou/vs_performance_profiler/
作者:kongdeyou(https://tis.ac.cn/blog/author/kongdeyou/)

原始链接:https://blog.kdyx.net/blog/kongdeyou/vs_performance_profiler/

版权声明: "CC BY-NC-ND 4.0" 署名-不可商用-禁止演绎 转载请注明原文链接及作者信息,侵权必究。

×

喜欢或有帮助?赞赏下作者呗!