処理時間を計測する

どうもとある処理に時間がかかってるような気がする。そんなときはきちんと時間を計測しよう。もちろんこの方のようにストップウォッチ片手に計測してもいいが、いやしくもプログラマのはしくれならプログラムで解決しよう。

…とか書くのも恥ずかしくなるぐらい簡単なコードで恐縮である。このコードに関してはコピペして使っていただいてもまったく構わない。コピペするより書いたほうが早いくらいだし。

見かけどおりPHP4でも動くはず。PHP5だとmicrotime()が引数を取る(trueを指定するとfloat値が返ってくるので単純に引き算すればいい)のでもっと簡単なコードになる。

getNowメソッドがちょっと冗長なのは、Lap機能も作ろうとしてやめた形跡だった記憶がある。

【StopWatch.php】

<?php
class StopWatch
{
    var $start_sec ;
    var $start_msec ;
    var $stop_sec ;
    var $stop_msec ;
    function start()
    {
        $this->getNow("start") ;
    }
    function stop()
    {
        $this->getNow("stop") ;
    }
    function getNow($kind)
    {
        $sec"{$kind}_sec" ;
        $msec = "{$kind}_msec" ;
        list($this->$msec, $this->$sec) = explode(" ", microtime()) ;
    }
    function dispTime()
    {
        echo "start:" . ($this->start_sec + $this->start_msec) . "\n" ;
        echo "stop :" . ($this->stop_sec  + $this->stop_msec)  . "\n" ;
        $sec  = $this->stop_sec - $this->start_sec ;
        if ($this->start_msec > $this->stop_msec)
        {
            $msec = ($this->stop_msec + 1.0) - $this->start_msec ;
            $sec -= 1 ;
        }
        else
        {
            $msec = $this->stop_msec - $this->start_msec ;
        }
        echo "time :" . ($sec + $msec) . "\n" ;
    }
}
?>

【example】

<?php
require_once 'StopWatch.php' ;
$sw = new StopWatch() ;
$sw->start() ;
// 計測対象の処理
while (true)
{
    // do something.
}
$sw->stop() ;
$sq->dispTime() ;
?>

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください