VS2010 profiler

来源:互联网 发布:域名被劫持怎么办 编辑:程序博客网 时间:2024/05/21 22:39

      所有人都希望自己的程序能够飞速运行,但是性能的提升又是何等艰辛,就连起步都那么困难。浩如烟海的代码,哪一段才是性能提升的关键?哪一段才是程序运 行的瓶颈?难道你只能通过在每个函数前后都添加一段时间输出来寻找耗时最长的函数吗?你应当相信,在这个信息化的时代,在这个效率为先的时代,也许每一个需要重复的工 作,都会有一种自动的方式来替代。下面,我将为你介绍一个寻找应用程序瓶颈的分析利器—— Visual Studio Profiler。

        既然它的名字以VisualStudio开头,那么它一定与VS有着什么联系了。没错,Profiler是Visual Studio中提供的一个分析工具,在主菜单中的Analyze选项中。如果你发现没 有这个选项,那么,你需要安装一个更为强大的VisualStudio版本。Team系列的VS才会有这个工具的安装。在VS8.0(2005)版本中,Visual Studio Team Edition 配有这个工 具;VS9.0(2008)中,Visual Studio Team System DevelopmentEdition 和 VisualStudio Team Suite 配有这个工具,而在VS2010中,当 然是Ultimate配有此工具了。

        Profiler很强大,你可以用他分析一个二进制文件,可以用他分析一个工程,也可以用他分析一个网站。无论是C#、VC还是VB,它能很好的分析。

        你可以用Profiler对一个Target做很多事情。最重要的当属函数执行时间的分析,Profiler会给出函数的执行时间,执行次数,执行时间占整个程序的百分比;更强大的是,他 可以给出一个调用树,这样,你可以在Profiler中查看这个程序到底是如何被一步步调用的。查看的过程中,你还能看到这些函数的执行百分比,你可以非常方便的找到最耗时的 函数。一层层的查下去,原来瓶颈就是那个你可能都没有正眼看过的小函数。感谢Profiler,你可以有目的的优化你的程序了。

       优化以后,你总得看看效果吧,于是再利用Profiler进行分析,然后呢?Profiler提供结果比较功能,很好很强大。你可以通过这个功能看看你的程序,哪些函数的执行效率提 升了,哪些又降低了。很方便。不管怎样,有效分析是Profiler最大的特点。于是Profiler提供了两种分析模式供你选择:Sampling 和 Instrument。

        Sampling就是采样

       通过在程序运行过程中暂停程序,记录堆栈中的信息,然后恢复程序来分析程序。不要看它会暂停程序,它的这种暂停、记录、恢复的速度是非常迅速的, 相对于程序的执行时间可以忽略不计。因此这种模式对程序执行的影响其实是相对较小的。但是由于采样的时间间隔,有些小的执行迅速的函数可能被忽略,不过,如果是为了性 能的提升,那些速度快的函数到并没有什么分析价值。另外一点,因为采样时间是系统的时间,在分析过程中会受到其他程序的影响。比如你在分析过程中打开一个虚拟机,也许 ,那段时间被执行的函数就背上了运行缓慢的黑锅。所以,若要精确分析,就需要Instrument了。

       Oh my god,Instrument执行过程超级缓慢,比软件龟行的速度慢多了,这么慢,干了什么?它在程序运行以前,侵入程序中,在每个函数的开头和结尾都嵌入了用于分析的 宏。在执行函数的过程中记录下宏传出来的信息。Instrument的分析用了两套时间。一套和Sampling一样,使用的函数实际执行时间,叫做Application Time;另一套使用的是 Profiler自行提供的时间单位,以程序执行的CPU时间片为基元计算出函数的CPU占用时间,称为Elapsed Time。你可以根据你的需要查看相应的执行时间,因为Instrument提供 的Elapsed Time,你将有足够的证据证明软件缓慢速度的罪魁祸首,有这样铁证的提供,缓慢的分析速度又何惧呢。

       在对程序执行过程的分析结束后,Profiler会对刚刚取得的大量数据进行处理,计算函数的执行时间,调用次数,以及函数之间的相互调用关系等信息。最后会得出一份报告。 你拥有报告查看模式的选择权利,你可以选择Summary, Call Tree, Modules, Caller/Callee, Functions, Marks 等等模式来查看这个分析的结果。

       有时候你会发现,后期的数据处理怎么如此缓慢呢?有两个原因,第一,确实需要分析的内容太多,程序太大,为了这个庞大软件的更好运行,就忍忍吧,喝杯茶,吃个饭再回 来看结果,另外一种可能,你分析了太多你不需要分析的数据。作为Visual Studio的一个部件,Profiler当然会提供人性化的选项:Launch with profiler paused。这个选 项让你可以忽略不想分析的程序打开过程。直到你需要分析时,Resume之,不需要的时候又可以Pause。为什么有这些选项?因为时间要花在刀刃上……

      另外,分析结束后就关掉VS吗?必然不是,一般来说,你当然想要留存一个分析的结果的备份。可是一看生成的那个vsp文件(vsprofiler),几百M甚至上G,你寒心了。于是VS Profiler又提供了一个人性化的选项:Save Analyzed,这个选项在哪?根据可视化编程的原则,当然放在了分析结果(report)的右键菜单中。保存的结果是一个vsps的文件 (你可以自己想想这后缀名什么意思)。如果你还嫌大,那么你可以export。导出成csv文件或者xml文件,他们虽然没有那么丰富的结果查看模式,但是作为性能提升的凭据,应 该足够了。

      突然发现,啰嗦了这么多,只是简单的介绍了一个Profiler的常用功能,具体怎么用,还有哪些用得少的小功能,都是一些简单的问题,你可以自己去探索。我建议你从以下一 篇文章开始你的Profiler之旅:《Find Application Bottlenecks with Visual Studio Profiler》,http://msdn.microsoft.com/en-us/magazine/cc337887.aspx这是微软MSDN杂志对Visual Studio Profiler的详细介绍。从软件发展现状到 Profiler介绍到Profiler的使用实例。图文并茂,它也有中文翻译版本:http://msdn.microsoft.com/zh-cn/magazine/cc337887.aspx,你若不喜欢看长篇英文,这个翻译版本也是个不错的选择。

原创粉丝点击