Justin
[原创]DebugTools系列(1):AQTime初探
[原创]DebugTools系列(2):AQTime配置
[原创]DebugTools系列(3):AQTime实践
[原创]DebugTools系列(4):AQTime经验总结
ä¸ã   背景介绍
AQTime 是一款Code Profile 工具,在2004年即获得了Sys-Con Magzine的最佳调试工具奖,它是由AutomatedQA公司(http://www.automatedqa.com)开发的,支持多种语言的性能测试。结合公司当前情况,将利用 AQTime 测试 .net 的 winApp 性能瓶颈。
二、方法概述
1、 确定测试范围:确定需要分析的业务功能范围;裁剪待分析的类和方法。
2、 确定测试粒度:依据由粗至细的粒度原则进行分析,依次进行类、方法、行级跟踪;
3、 分析结果数据:根据截获的数据,分析数据确定下一步动作。
三、操作步骤
1ã File –> New Project(Shift+Ctrl+N) 新建空白测试工程AQtime_Demo_TestPrj.aqt;
2ã 选择测试类型。AQtime可进行Allocation profiler、Coverage profiler、Performance profiler等多种测试数据的采集。由于关心函数的执行时间的性能,此处选择“Performance profile”进行数据收集策略;
3ã 添加待测文件或模块(*.dll,*.exe) ;在 Setup标签页中添加待测程序AQTimeDemo.exe
4ã 确定测试区域范围。
4.1 依据“由粗至细”的原则,第一次采取数据时,可直接勾选“Full Check by Routines”,此时将跟踪捕获过程中所有方法的执行细节。为了更有针对性,也为了减少赛选数据量,可手动添加待测试区域 ProcessMethod 。
4.2 添加待测方法
在Setup标签的Modules中,选择待测方法后,右键,选中“Add Selected to Aera”菜单中的“ProcessMethod”,即可将待测方法添加到测试区域。
5ã 设定数据采集动作;
5.1 添加动作:
在 “Triggers and Actions” 标签页中右键,选择“Add Action…”,会出现“Add Action”对话框。如图填写基本数据后,确定即可。
4.3 设置获取结果动作函数;
在 Setup标签的Modules中,选中获取结果前执行的函数“AQtime.BusinessLayer.Process”后,右键,选择“Add Selected to Action”的“GetResult”,即可将指定方法添加到GetResult动作中。目的是在执行这些函数后,获取数据结果。
6ã 按F5启动应用程序,此时会出现“Run Setting”设置对话框,直接点击“Run”即可。在测试*.dll 等内容时,需要先设定运行参数Run -> Parameters 即可出现设定参数对话框。
7ã 按照正常步骤执行程序,当程序执行完成后,AQtime 将自动记录每个函数的执行细节:
8ã 分析数据
选择其中的某个方法,可在底部得到与该方法关联的细节。个人最喜欢的是下面的 “Call Graph”,此处可以看到各种函数的调用关系,并显示出每个函数的执行时间和内容。
9、通过分析上面的数据,确定下一步需要跟踪的方法为“BusinessLayer::Process”。按照4.2中的方法,将该方法添加到ProcessMethod 区域中。为了更清楚的分析数据,双击“Areas(Routines,Lines) ”面板中的“ProcessMethod”区域,更改Level为“Lines”,并取消勾选的“Full Check By Routines”。
10、按 F5 重启应用程序,重新按照正常步骤执行程序;
11、重新分析收集到的数据。在分析的数据底部,切换到“Editor”标签,得到每行命令执行的时间:
通过以上的分析,得到性能瓶颈点在于Source Line 的 46行的代码。当反复调用该方法50000次占64.12%的时间,因此我们优化的方法的重点在于改变Process方法中的瓶颈点。找到瓶颈点后,就是对症下药制定修改策略。
四、总结
以上就是通过介绍使用 AQtime分析winApp的性能瓶颈点和热点,制定相关修改策略。使用AQtime不仅仅可以测试 c/s 的性能瓶颈,也可以找到 b/s 的瓶颈,基本上都是大同小异。
相关资料下载:http://download.csdn.net/source/744776