4).Full Optimization(完全最优化):
Opening your application in AQtime.
一、创建工程:
在AQTIME的主菜单中选择File | New Project。
二、加入应用程序或模块:
在Setup面板的Modules窗口中右键,选择Add Module,或者点击工具条按钮,在弹出的对话框中选择待测程序或模块。
三、设置主程序:
选择主程序,右键选择Set as Active Module,设置为主程序。如图:
Controlling what to profile and when to profile
一、What to Profile —— Areas功能
1.Areas功能的意义:
当程序非常庞大而复杂时,如果将所有代码调用的信息都做Profiling的话,很难定位问题。通过Areas面板设定我们只关心的模块或代码的信息,有助于帮助我们过滤不需要的信息,最终生成有价值的报告。
NOTE: Areas只对Performance, Converage, Allocation和Function Trace起作用。
2.Area的设置:
1).自定义区域:
自定义的区域的类型有两种,一种是Including,即Profiling该区域的信息;Excluding对应的是不记录该区域的信息。Area的级别也同样分为Class,Routine和Line级别。Level级别对应也有Class,Routine和line。这三种级别的区别将在后面介绍。
2).Full Check:当此选项选中时,Profile的是整个工程的所有模块。
3).Profile Entire .NET Code:此选项与Full Check类似,所不同的是在Profiling时不但会记录当前工程中的模块,而且也会记录这些模块所使用的.NET代码。
NOTE:Profile Entire .NET Code setting only affects the managed code。 3.Profiling Levels:
1).Routine Level(模块级):
AQtime将会收集整个模块的信息,比如在性能测试中,某一个模块被调用了多少次、工作了多长时间。 2).Line Level(代码级):
AQtime将会收集每行代码的信息,比如在性能测试中,每行代码的执行时间、该代码被执行的次数等等。
NOTE:Line profiling requires information about lines in source code. 3).Class Level(类级别):
AQtime将会记录Areas中划定的类所对应对象的创建和销毁。此级别只在Allocation Profiler中启用。
二、When to Profile —— Triggers and Actions功能
1.Using Actions:
1).精确地记录时间:
场景:在测试浏览器启动性能中,假定我们规定的启动时间为:程序加载开始到界面的完全显示。那么如何记录这段时间?用秒表显然不是好办法。 解决方法:使用Actions功能的GetResults. 举例说明:
a).用VC6.0创建一个基于MFC的Dialog对话框程序。 b).在AQtime中加载此程序。
c).在Triggers and Actions中Add Action,如图:
d).将CProfilerTestDlg类中的OnInitDialog函数拖入刚才创建的Actions中:
Initial Profiling Status for Threads选项表示是否在程序创建线程时就开始Profiling。
以上的设置实现了在程序创建线程时就开始记录时间,直到OnInitDialog函数执行完毕退出后停止记录,并且生成报告。这段时间就是我们之前定义的启动时间。
e).F5运行,得到如下结果:
结果分析:从WinMain函数入口执行开始到对话框OnInitDialog完毕,共耗时61.10毫秒。其中有57.60毫秒是花费在InitInstance初始化工作中。 2).过滤无用的时间
场景:只记录程序某个功能执行的时间,需要过滤掉初始化等不关心的时间。 解决方法:综合使用Actions中的Enable Profiling和Get Results。 举例说明:
a).用VC6.0创建一个基于MFC的Dialog对话框程序如下:
b).在AQtime中加载此程序。
c). 设置开始计时的Action和结束计时的Action: