|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2001-11-26 11:26 UTC] alberty at neptunelabs dot 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\" : ";
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>";
?>
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Nov 04 19:00:02 2025 UTC |
I modified the script a bit by adding var_dump(microtime()) around the function calls. The output : With reference: string(21) "0.58075200 1041701482" string(21) "0.20217700 1041701490" Without reference: string(21) "0.20247500 1041701490" string(21) "0.20739800 1041701490" as everyone may see without reference is faster as it has to be (according to some docs). I think that there is something wrong in the way the script computes the time. Ooops, I found it : $tmp = explode(' ', microtime()); $measure['Start Reference']=(double)$tmp[0] + (double)$tmp[1]; the indexes are swapped must be $measure['Start Reference']=(double)$tmp[1] + (double)$tmp[0]; Closing this.