iwind的专栏

iwind - 匆匆人生中,你做了几件令自己骄傲的事呢?

用户操作
[即时聊天] [发私信] [加为好友]
章节ID:ccterran
23071次访问,排名5134好友1人,关注者1
ccterran的文章
原创 23 篇
翻译 0 篇
转载 0 篇
评论 8 篇
iwind的公告
本blog皆为iwind原创或翻译,转载时最好写上出处。

我的日记

我的其它常用名:ccterran,month,coldwind

最近评论
fftaks:Wow gold
vanxining:很不错。
mark:语言通俗简明。good!
study:谢谢你。我在你这里学了好多东西。解决了我很多疑问!
谢谢!
寻梦人:非常不错.正愁资料呢,谢谢
文章分类
收藏
    相册
    PHP人
    IWIND(RSS)
    PHP艺术
    个人日记
    PEAR中文
    我的日记(RSS)
    技术资源
    ADODB
    PEAR
    PHP.NET
    SF.NET
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 用PEAR::Benchmarking之Timer实现PHP程序计时收藏

    新一篇: JS基础 -- 书写JScript代码 | 旧一篇: PEAR::HTML_BBCodeParser 中文文档及示例

    我们经常在系统程序调试时需要记录运行时间,以观察程序运行的效率问题,或者对多种实现方法进行比较,一个好的计时器就不可或缺了.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();

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

    发表于 @ 2004年10月29日 12:35:00|评论(loading...)|编辑

    新一篇: JS基础 -- 书写JScript代码 | 旧一篇: PEAR::HTML_BBCodeParser 中文文档及示例

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © iwind