示例:性能测试工具GpProfile

示例:性能测试工具GpProfile

1、准备工作
1.1、安装GpProfile工具

双击“/GpProfile/gpprf.exe”安装。

clip_image002

1.2、编写目标代码

备注:参考安装包自带的Profile.dpr工程。

1.3、设置编译选项

接下来就要编译运行修改后的代码了,注意要想编译添加了GpProfile Api调用的程序,我们要将GpProfile的安装路径添加到Library Path中,否则编译时,会提示无法找到GpProf.dcu。

clip_image002[4]

clip_image004

2、开始测试
2.1、启动GpProfile工具

注意:对于Delphi2007只能手动启动GpProfile工具

(1)、GpProfile安装程序会在Delphi7的IDE的Tools菜单下添加两个菜单项:

*GpProfile

*GpProfile –remove instrumentation

clip_image006

(2)、点击GpProfile菜单将启动GpProfile后,GpProfile会自动加载当前IDE中的项目文件作为测试项目,示意图如下:

clip_image008

2.2、设置性能分析代码

在GpProfile 的主窗体中,在Instrumentation页中,我们可以看到测试项目中的全部的函数和类的全部过程和函数。选中某个方法后,会在下面的编辑框内显示相应的代码的预览,选中方法前面的CheckBox则表示GpProfile会分析该函数或过程的性能执行情况。

clip_image010

完成选择之后,点击菜单Project | Instrument,GpProfile会修改工程的源代码,添加GpProfile Api的声明,这时我们在Delphi IDE 中会收到一个源代码变更,要求重新载入源程序的消息。选“ 确定”后,就会看到修改后的代码了,代码示意如下:

clip_image012

clip_image014

procedure TForm1.SelectionSort(var A: array of Integer);

var

I, J, T: Integer;

begin

{>>GpProfile}

ProfilerEnterProc(1);

try

{GpProfile>>}

for I := Low(A) to High(A) - 1 do

for J := High(A) downto I + 1 do

if A[I] > A[J] then

begin

T := A[I];

A[I] := A[J];

A[J] := T;

end;

{>>GpProfile}

finally

ProfilerExitProc(1);

end;

{GpProfile>>}

end;

其中被包围在{>>GpProfile}{GpProfile>>}和{>>GpProfile U}{GpProfile U>>}等标记之间的代码就是GpProfile的性能分析代码。

2.3、运行目标工程

编译运行修改后的代码。运行程序直到应用程序结束,GpProfile Api会自动在应用程序所在目录生成*.prf 文件,这是分析性能的记录文件。

2.4、查看测试报告

(1)、打开测试报告

如果在运行应用程序时, GpProfile打开着。那么,应用程序运行结束时,GpProfile 会自动打开测试报告。否则,你应该在GpProfile的主界面中,选择Profile/Open 菜单,到应用程序所在目录中去打开测试报告。

clip_image016

clip_image018

(2)、查看测试报告

打开测试报告后,我们在主界面中切换到Analysis页就可以看到性能报告了,示意图如下:

clip_image020

报告分为下面几列:

Procedure:显示我们选定的要分析的方法名称

%Time:显示各个方法运行时间相对于总的运行时间的百分比

Time:实际的运行时间的秒数

W/child:子函数占用时间

Calls:表示被分析的方法运行的次数。(有时一次运行给出的性能数据可能不稳定,可以多次运行取结果平均值)

Min/Call:多次调用时,所用的最少时间

Max/Call:多次调用时,所用的最多的时间

Avg/Call:多次调用时,每次的平均时间

(3)、测试结论

从图中可以看出,三种排序法中快速排序的效果是最好的,对于15000个元素的数组,速度是起泡排序的745倍,是选择排序的253倍。想像一下,如果在你写的Delphi程序中有30个过程的算法是类似于起泡排序这样缓慢的算法的话,我敢打赌使用了30个类似于快速排序的算法的Java程序一定比你的Delphi程序快20倍。估计那时你的老板一定会让你转行去煮咖啡了。

2.5、移除性能分析代码

GpProfile在我们的代码中加入了很多自定义的标记和Api调用,如果要手工地删除,实在是很不方便,幸好点击Project | Remove Instrumentation就可以将代码中插入的{>>GpProfile}等标记自动删除了,不过为了保险起见,我建议你还是在Remove Instrumentation之前备份一下代码,以免造成损失。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值