首页 > 代码库 > 使用Visual Studio 寻找App性能瓶颈

使用Visual Studio 寻找App性能瓶颈

使用Visual Studio 寻找App性能瓶颈

最后更新日期:2014-05-05

阅读前提

环境:Windows 8.1 64bit英文版,Visual Studio 2013 专业版Update1英文版

 

正文

          如果在应用程序的开发过程中,从头到尾顾及性能优化,开发效率会很低,所以我们需要借助profiler工具分析现有代码,性能的瓶颈在哪里? 然后针对热点进行优化,这样可以提高产品的投入产出比,Visual Studio 2013专业版的profile工具有四个功能,普通的C++程序只使用了[CPU Sampling]和[Instrument]两个功能,其中[CPU Sampling]是分析C++程序性能的推荐选项。

 

         以需要几秒钟才能运行完毕的C++语言Windows控制台项目为例,选择,主菜单[Analyze]->[Performance and Diagnostics]打开[PerformanceWizard]窗口,有四个选项,选择CPU Sampling(推荐),测量函数的调用时间,这个wizard有三步,最后点击[Finish]就启动profiling直到程序执行结束,profile工具生成Sample Profiling Report。

Hot Path栏目中,

    ElapsedInclusive Time,函数占用的时间

   Elapsed Exclusive Time,是inclusive time减去子函数的运行时间

 

         如果你要知道各个函数的详细调用次数可以在[Performance Wizard]中选择[Instrumentation],因为它要在每个函数前后插入测量代码所以运行程序和分析报告的时间长很多, 结束后会生成Instrumentation Profiling Report,相对于Sample ProfilingReport只是多了函数调用次数的信息,所以不推荐。

如何找到最花时间的函数?

         Summary视图中,FunctionsWith Most Individual Work栏列出最耗时的五个函数,直接点击列表中的函数名称,切换到[Function Details]View,下面是initSample函数[FunctionDetails]视图的截屏:


 三个图块分别代表[1]调用者[2]当前函数[3]被调用者,深蓝色背景上面显示包括子函数调用所占时间百分比(Inclusive Time),淡蓝色显示函数体(不包括子函数)本身所占时间百分比(Exclusive Time)。点击下面的[Caller/Callee]可以转到[Caller/Callee]视图,通过调用者和被调用者列表,看到各个函数的调用次数,花的时间百分比。

         你可以切换到[Functions]视图看到所有函数,让这些函数按照所耗时间多少排序,寻找你要的最耗时函数。

根据名字寻找指定函数

         切换到Functions(或Modules)视图,[Ctrl]+[F]快捷键弹出查找窗口输入要找的函数名称,指定查找范围为[Current Document],按[Enter]找到函数后,双击函数名称就可以切换到这个函数的[Function Details]视图。要查找某个模块的函数,最好是在[Modules]视图下,在这个视图下方便查找某个Modules下的函数。

 

根据调用次数查找指定函数

   [Functions]视图中,可以点击某个列名,函数列表会按照这个列的属性的大小值排序,找到要的函数后双击就可以切换到这个函数的[Function Details]视图了。

 

根据函数调用顺序查找

         如何你知道热点大致的位置,切换到[Call Tree]视图,找到根节点后,右键单击弹出菜单选择[Set Root],这样就可以不用看其它分支,如果要重置根节点,弹出菜单中选择[Reset Root]就可以了。

    根据Number ofCalls(调用次数)和Elapsed Tiime(时间开销)一步步展开节点,直到要修改的函数,右键弹出菜单选择[View Source]可以转到具体的源代码,[Show Function Details]切换到当前函数的[FunctionDetails]视图后,蓝色框的右上角显示的是当前函数总的时间(Inclusive Time)开销占的百分比,蓝色框可以左键单击切换到指定函数的[Function Details]视图,点击三个框下面的Caller/Callee可以看到更详细的调用者,被调用者信息。

 

如何分析运行时间很长的程序

         profile运行的时候,可以选择[StopProfiling],结束分析后生成Instrumentation(或Sampling) Profiling Report,默认出现Summary视图。

         参考下图Summary视图, 在曲线图上标记出要分析的时间段,右键弹出菜单,单击[Filter Profiling Data by Selection]项即可。

 

参考资料

《Find Application Bottlenecks with Visual Studio Profiler》

http://msdn.microsoft.com/en-us/magazine/cc337887.aspx

 

使用Visual Studio 寻找App性能瓶颈