设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 其他开发语言 >> 用PEAR::Benchmarking之Timer实现PHP程序计时
精品推荐
其他开发语言点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·Modem 常用AT指令集
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
·Thinking in C++ 简体中文第二版
·debug和release的区别
·error LNK2001: unresolved external symbol __ftol2 错误解决
·C库函数手册
·一个简单的C语言编译器
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

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

作者: 来源:网络文章 时间:2005-12-17 19:15:39

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

下载
你可以从 PHP.net/package/Benchmark/download" target=_blank>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 indexex time%
Start1099020859.80505200-0.00%
Stop1099020859.805950000.000898100.00%
total-0.000898100.00%

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


方法: display( )
描述:打印由getOutput方法返回的信息.
形如下表:
 time indexex time%
Start1099021292.32145600-0.00%
Mark11099021292.322020000.00056446.38%
Mark21099021292.322097000.0000776.33%
Stop1099021292.322672000.00057547.29%
total-0.001216100.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();

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


用PEAR::Benchmarking之Timer实现PHP程序计时 相关文章:
用PEAR::Benchmarking之Timer实现PHP程序计时 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com