ID: 22435
Updated by: [EMAIL PROTECTED]
Reported By: carl at topthetable dot com
-Status: Open
+Status: Bogus
Bug Type: Performance problem
Operating System: Redhat 7.2
PHP Version: 4.3.1
New Comment:
Try this script which actually shows the time _spend_ for count:
<?php
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$tot = 0;
for ($j=0; $j < 10; $j++) {
$time = dosize($j * 1000);
echo $time,"\n";
$tot += $time;
}
echo "Avg: ", $tot/$j, "\n";
function dosize( $y )
{
$t = array();
for ( $i=0; $i<$y; $i++ ) {
$t[] = array( array( "3", "1" ), "3", array(
array ( "5", "1", "8" )) );
}
$start = getmicrotime();
count( $t );
$end = getmicrotime();
return $end - $start;
}
?>
Results for me:
Linux (double Celeron 500Mhz):
0.00995302200317
0.000295042991638
0.000288963317871
0.000303030014038
0.000295042991638
0.000295042991638
0.000294089317322
0.000292062759399
0.000293016433716
0.000355005264282
Avg: 0.00126643180847
MacOSX, PowerPC (1Ghz or faster, not sure):
0.00011193752288818
9.0956687927246E-05
0.00010311603546143
0.00010299682617188
0.00010395050048828
0.00010097026824951
0.00011003017425537
0.00013697147369385
0.00010299682617188
0.00010597705841064
Avg: 0.00010699033737183
Nothing wrong here..
Previous Comments:
------------------------------------------------------------------------
[2003-02-26 08:11:50] carl at topthetable dot com
count() is increasingly slow when used to count large arrays. This is
using 4.3.1 (compiled from source) on a Redhat 7.2 box. The box has
about 80Mb free, so it's not a paging issue. It works as expected on
Mac OS X running 4.3.1-dev.
Looking at PHP's and Zend's source, I would expect the time taken to
return the count() of an array to be similar regardless of the size of
the array.
Below is a script to demonstrate the problem.
<?
$st = microtime();
echo "Script started: ".microtime()."\n";
dosize( 10 );
dosize( 20 );
dosize( 50 );
dosize( 100 );
dosize( 200 );
dosize( 500 );
dosize( 1000 );
dosize( 5000 );
dosize( 10000 );
function dosize( $y ) {
echo "Doing size $y\n";
echo " Starting array building:".microtime()."\n";
$t = array();
for ( $i=0; $i<$y; $i++ ) {
$t[] = array( array( "3", "1" ), "3", array( array ( "5", "1",
"8" ) ) );
}
echo " Array built: ".microtime()."\n";
count( $t );
echo " Count finished: ".microtime()."\n";
}
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=22435&edit=1