[原创]DebugTools系列(1):AQTime初探

导读通过这篇文章,读者可以对AQTime有个初步的认识,并且可以参考文章中的实例实际上手实践。篇幅有限,关于AQTime不同部分的深入介绍,后续还会有不同的文章。
记得留下宝贵意见哦!!! 源代码下载: 


AQTime是一款功能强大的Code Profiler工具,早在2004年即获得了Sys-Con Magzine的最佳调试工具奖,它是由AutomatedQA公司(http://www.automatedqa.com)开发的。大家可以在其官方网站上获得试用版,或者购买正式版本,其他途径这里就不涉及了。


这是AQTime的主界面,图片来源于其帮助文档,各个组成部分动手实践的时候,一看就知道了,这里就不具体介绍了。下面我们通过一个实际的例子,简单介绍AQTime的使用过程,篇幅所限,忽略的很多细节会在后续的文章中逐渐丰富,这篇文章的目的只有一个,就是演示使用AQTime进行最简单的性能分析的基本步骤。


AQTime有很多种代码分析方式,一般主要是用它来做性能分析,目的是定位程序性能瓶颈,然后再有针对性地进行优化。这里我们也主要介绍Performance Profiler,其他选项以后有机会再介绍,大家也可以通过其帮助学习其他Profiler选项。


如图所示AQTime支持很多种类型程序,这里我们仅以ASP.NET程序为例,其他类型的程序大同小异。


如图所示,使用AQTime,第一步必须先创建Project,也就是说AQTime的分析结果是以项目为单位组织的,每个项目里可以包括多个分析结果(下文详解什么是分析结果)。第二步是给项目添加Module,如图右侧的红框所示,我已经给这个项目增加了一个名为Justin.UILibrary.dll的模块,也就是说我要分析的是这个DLL的性能。


这次我们的小白鼠是我以前写的一个ASP.NET程序,具体见这里


前面我说了已经增加了一个名为Justin.UILibrary.dll的模块,这是这个示例的一部分,如果想完整分析整个网站的性能,光这一个DLL是不够的,还应该包括由ISAPI动态生成的aspx文件对应的类的DLL,所以我们还要把目录C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\justin里的DLL也作为Module,如上图所示,在我的VS2005安装在C:\的情况下,ASP.NET页面对应的动态生成的DLL都是在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\目录下的,而justin文件夹对应的则是这个示例在IIS里配置的虚拟目录的名称,再后面的两个随机字符组成的文件夹\a3c942fc\f42a5099是在第一次浏览页面时生成的,生成一次以后,再访问相同页面就不会再生成了,大家可以实验一下,如果整个删除justin文件夹里的内容,下次浏览页面时还会重新生成的,但是每次文件夹的名词都是随机,其中的DLL的名称也是随机的,所以这个时候就需要在AQTime里重新添加新生产的DLL。
如果不想分析页面的性能的话,就不需要上面这些操作了,直接把网页引用的类库的DLL拖到Modules栏里就OK了。


前面的准备工作做好以后,再配置一下起始页面的路径,如图所示,这步不是必须的,因为真正执行Run的时候,如果没有设置这个参数,AQTime会先弹出一个提示框询问你要访问的页面,那个时候再填也来得及,不过我习惯先在这里设置好。


基于前面的工作,我们现在就可以正式启动AQTime了,方法就是点Run按钮或是按F5,AQTime先会自动重启IIS,然后启用默认的浏览器加载Default.aspx页面。注意上图特意用红框标识出来的部分在启动前后的对比,那个钟表示现在AQTime正在进行Profiling,那个照相机是一会儿要用到的。现在我们在浏览器中分别进行一次提交、浏览、修改操作。


如图所示,前面我们在页面中执行了一下操作,现在我们要做的就是通过那个照相机图标的功能收集我们前面做的那些操作过程中,程序的执行所有细节,收集的结果结束后,AQTime会自动跳转到Results页签,在这个页签左边按进程对结果进行了分组,右边显示的是当前选择进程的详细分析结果。


这里先介绍一下如何保存和分享收集的结果数据,一般在本机,收集的数据可以自动随着Project一起保存,下次还可以通过打开原来的Project进行浏览。但是如果我们要把结果数据分享给其他人的时候,有时通过Project来分享可能会遇到一些麻烦,因为项目是需要引用具体的Module的,也就是我们在前面添加的那些DLL,而这些DLL是依赖于本地路径的,也就是说把Project拷贝到不同的机器上,可能会因为找不到原来的路径而无法加载需要的Module,进而无法浏览结果数据。其实在进行性能分析的时候,因为同一个程序可能有很多人参与分析工作,也可能是不同人侧重不同的部分,这种结果数据的分享还是经常发生的,那么怎么办呢?这就要有使用上图所示的Save to File功能,可以将结果数据保存为一种*.aqr格式的文件,可以把这个文件分享给其他人,而其他人在没有相同本地Module路径的情况下,新建一个空的Project,然后可以通过Load From File功能加载这个*.aqr文件,就可以正常浏览结果数据了。



如上图所示,可以通过Report页签里的Grid列表对数据进行分组、排序、过滤等丰富的操作,而且在Grid里选中的方法,同时在下面部分的页签里都是同步的;在Report页签里一般我们主要看Time with Children和HitCount,再配合Time和First Time with Children来进行分析,也就是说我们主要关注那些方法执行消耗的时间最长,那些方法被命中的次数最多,那么这些方法就是性能优化的重点。在下面的页签中,一般比较常用的是Call Tree和Call Graph,前者通过树形列表,非常直观的显示待分析的数据,而且双击某一行就可以逐层深入,后者通过更直观的图形显示进程里方法调用的全过程,同样也可以逐层深入,非常酷!如上图显示的都是.NET底层的方法调用过程,也就是说,我们可以通过这个功能,轻而易举地分析底层的技术细节,简直太爽了吧!

总结:篇幅所限,不想长篇大论,这样我写得累,大家看得也累,都难坚持,还不如多分几个部分。如开篇所述,这篇文章的目的就是教大家可以上手使用 AQTime,只要能上手,能收集出结果数据,目的就算达到了,所以这里还是省略了很多细节的。AQTime主要的角色是分析定位性能瓶颈,它只是个探雷工具而已,它能告诉我们那个方法执行的最慢,被重复执行的次数最多,但是如何改变这个瓶颈,就不是它的责任了,那就是仁者见仁,智者见智的问题了。下一篇文章将在这篇文章的基础上,对AQTime的配置细节进行详细的介绍,合理地配置分析范围,对于快速定位问题是非常重要的。

Debug 探索团队
-欢迎加入博客园.Debug探索团队 Copyright © Justin

posted @ 2008-10-06 00:11  Justin  阅读(13036)  评论(49编辑  收藏  举报