最近在写一个超级轻量的跨设备通讯库,包含RPC(远程函数调用)和DataSet(数据同步),设计上分了三层,最底层是网络通讯层,中间是组包解包层,最上层是功能接口层。写好了初步的一个版本后,单机测试一个4字节变量的同步,发现同步1000次大约需要170ms,远远没有达到理论的网络传输上限。之前一直知道Visual Studio有一个性能工具,但仅限于玩一玩,这次是首次用它来分析性能瓶颈。
首先在调试菜单下启动性能探查器。
选择CPU使用率,监视CPU使用率能够得知每个函数的执行耗时,一键开始。
程序运行一小会儿后直接关掉,就自动生成分析报告了。
重点关注CPU占用率高的函数,一层层点开,发现两次组包占用了46.83%+45.17%=92%的CPU资源,而通讯只占了2.38%。
右键查看源可以直接跳到具体的代码处。
嘿嘿,既然发现了瓶颈位置,着重优化组包的过程。比如在改变Data值的时候,会触发同步,而同步的组包过程有两次序列化,组包时创建和销毁了两次OutputArchive,如上图,这在序列化中又占了主要的CPU资源开销,我们可以重构组包解包层,通过分段序列化再组合的形式,将两次序列化简化为一次序列化,优化性能。
有了这个工具分析过程变得非常简单,不需要遍地打时间戳来测试了,Visual Studio真香…
协议
本文以上内容遵循CC BY-ND 4.0协议,署名-禁止演绎。
转载请注明出处:https://tis.ac.cn/blog/kongdeyou/vs_performance_profiler/
作者:kongdeyou(https://tis.ac.cn/blog/author/kongdeyou/)