Bug #14237 Updated: reference calls in some cases very slow

From: Date: Thu, 13 Dec 2001 01:06:29 +0000
Subject: Bug #14237 Updated: reference calls in some cases very slow
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-73443@lists.php.net to get a copy of this message
ID: 14237 Updated by: mfischer Reported By: alberty@neptunelabs.com Status: Open Bug Type: Performance problem Operating System: i686-pc-linux-gnu PHP Version: 4.1.0 New Comment: That's a known issue with the current Zend Engine. We could move it to a ZE feature request, but will it change anything soon? I doubt ... Previous Comments: ------------------------------------------------------------------------ [2001-12-12 19:59:37] yohgaki@php.net PHP Version updated to 4.1.0 ------------------------------------------------------------------------ [2001-12-12 19:58:57] yohgaki@php.net Output from Linux Celeron 433/384MB/PHP 4.1.0/Apache 1.3.22. Loopcount: 100 String size: 1048576 Time for function request "with_reference" : 1.6308959722519 secs Time for function request "without_reference": 0.0011709928512573 secsexecution time of without_reference is 1393 times fast as with_reference! There must be something wrong.... ------------------------------------------------------------------------ [2001-11-26 11:26:29] alberty@neptunelabs.com Hi, i have found a very critical behavior with references under php. The usage of references push in some cases the execution time extremly higher. I have written a small php script to explain the problem. The main problem is, the longer the string the higher the execution time, if you use a reference to the string. <?php // a function with using a reference to a parameter function with_reference (&$stream, $loopcounter){ for ($x=0;$x < $loopcounter; $x++){ $xyz=substr($stream,0,5); // i take only the first 5 characters } } // the same function, but without a reference function without_reference ($stream, $loopcounter){ for ($x=0;$x < $loopcounter; $x++){ $xyz=substr($stream,0,5); } } set_time_limit(60); $loopcount=100; // only 100 function calls! $streamsize=1048576; // 1MB, the longer the slower!!! Try 2MB. // First, made a big string for($x=0,$stream='';$x<$streamsize;$x++,$stream.='x'){} // Start function with a reference and measure start time $tmp = explode(' ', microtime()); $measure['Start Reference']=(double)$tmp[0] + (double)$tmp[1]; with_reference ($stream, $loopcount); // Start function without a reference $tmp = explode(' ', microtime()); $measure['Start Normal']=(double)$tmp[0] + (double)$tmp[1]; without_reference ($stream, $loopcount); // measure end time $tmp = explode(' ', microtime()); $measure['End']=(double)$tmp[0] + (double)$tmp[1]; // subtract times $with_ref_sec=$measure['Start Normal']-$measure['Start Reference']; $without_ref_sec=$measure['End']-$measure['Start Normal']; // output the times echo "<tt>"; echo "Loopcount: $loopcount<br>"; echo "String size: $streamsize<br>"; echo "Time for function request \"with_reference\"&nbsp;&nbsp;&nbsp;: "; echo $with_ref_sec; echo " secs<br>"; echo "Time for function request \"without_reference\": "; echo $without_ref_sec; echo " secs<hr>"; echo "execution time of without_reference is <b>".round($with_ref_sec/$without_ref_sec)."</b> times fast as with_reference!</tt>"; ?> ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=14237&edit=1

« previous php.dev (#73443) next »