分享
 
 
 

用PEAR::Benchmarking之Timer实现PHP程序计时

王朝php·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

我们经常在系统程序调试时需要记录运行时间,以观察程序运行的效率问题,或者对多种实现方法进行比较,一个好的计时器就不可或缺了.PEAR中的Benchmarking_Timer就是一个可以计算任意两点之间时间差的类.

下载

你可以从 http://pear.php.net/package/Benchmark/download 下载Benchmarking框架,然后取出其中的Time.php,把它放在和PEAR.php同级目录下.然后再建一个文件index.php,供测试用.

第一个程序

在index.php里写入

<?php

//@author:iwind

//包含类文件

require "Timer.php";

//创建一个对象

$timer = new Benchmark_Timer();

//计时开始

$timer->start();

//测试的一段脚本

for ($i=0; $i<1000; $i++)

{

//we do nothing here

}

//设置标记

$timer->setMarker("Mark1");

//输出两点之间的用时

echo $timer->timeElapsed("Start", "Mark1");

?>

然后执行之,就可以得到0.000543这样的结果,大致为从开始到Mark1点之间的耗时.

类方法

方法:Benchmark_Timer( [mixed $auto = false])

描述:构造器,开始计时器记录.

参数:boolean $auto,缺省为false,如果设定为true的话,则会自动打印计时器结果.形如下表

time index

ex time

%

Start

1099020859.80505200

-

0.00%

Stop

1099020859.80595000

0.000898

100.00%

total

-

0.000898

100.00%

分别列出开始/终止的时间索引,与上一标记之间的运行时间,与上一标记之间的运行时间占总耗时的百分比(所以Stop点一直为100%),以及总耗时.

方法: display( )

描述:打印由getOutput方法返回的信息.

形如下表:

time index

ex time

%

Start

1099021292.32145600

-

0.00%

Mark1

1099021292.32202000

0.000564

46.38%

Mark2

1099021292.32209700

0.000077

6.33%

Stop

1099021292.32267200

0.000575

47.29%

total

-

0.001216

100.00%

列出每一标记的时间索引,与上一标记之间的运行时间,与上一标记之间的运行时间占总耗时的百分比,以及总耗时.

调用该方法前,应该先调用stop()来终止计时(并不会终止程序).见例2.

方法: getOutput( )

描述:返回格式化后的计时器信息. 该方法把计时器信息放如一个表中(如上表),供display()方法列出.

方法:getProfiling( )

描述:返回计时器信息.将是形如

Array

(

[0] => Array

(

[name] => Start

[time] => 1099021787.69669100

[diff] => -

[total] => 1099021787.696691

)

[1] => Array

(

[name] => Mark1

[time] => 1099021787.69675900

[diff] => 0.000068

[total] => 1099021787.696759

)

[2] => Array

(

[name] => Mark2

[time] => 1099021787.69683500

[diff] => 0.000076

[total] => 1099021787.696835

)

[3] => Array

(

[name] => Stop

[time] => 1099021787.69694500

[diff] => 0.000110

[total] => 1099021787.696945

)

)

的二维数组.0,1,2...为标记所在位置.假设x为某一标记所在位置,则$profiling[x]['name'] = 标记x的名称 $profiling[x]['time'] = 标记x的时间索引 $profiling[x]['diff'] = 从x-1标记到x标记之间运行的时间差 $profiling[x]['total'] = 在标记x以前所有的运行时间.

方法:setMarker( string $name)

描述:设置标记.

参数:string $name - 欲设置的标记的名称,且区分大小写.

方法:start( )

描述:设置"开始(Start)"标记,也代表着计时的开始.

方法:stop( )

描述:设置"终止(Stop)"标记,也代表着计时的终止.

方法:double timeElapsed( [string $start = 'Start'], [string $end = 'Stop'])

描述:返回两个标记之间的耗时.

参数:

string $start - 开始标记,缺省为"Start"

string $end - 结束标记,缺省为"Stop"

含6位小数.

应用

1,记录两点的时间差

//创建一个对象

$timer = new Benchmark_Timer();

//设置标记 ("Mark1")

$timer->setMarker("Mark1");

//一段测试

for ($i=0; $i<100; $i++)

{

//we do nothing here

}

$timer->setMarker("Mark2");

//输出两点之间的用时

echo $timer->timeElapsed("Mark1", "Mark2");

2,列出计时器的信息.

//创建一个对象

$timer = new Benchmark_Timer();

//计时开始

$timer->start();

$timer->setMarker("Mark1");

//一段测试

for ($i=0; $i<100; $i++)

{

//we do nothing here

}

$timer->setMarker("Mark2");

//输出两点之间的用时

echo $timer->timeElapsed("Mark1", "Mark2");

//中止计时

$timer->stop();

$timer->display();

总结

显然如果你愿意,你可以在程序中设置无数个标记,如果你的一个程序运行速度较慢,你或许可以用它来测测到底哪段程序耗时最长,以近可能快速的找出问题所在.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有