I knew that there would be some overhead when working with objects vs
working with arrays, but I didn't expect this much. Is there some
optimization that I could do to improve the performance any? While
the script below is just a benchmark test script, it approximates
functionality that I'm going to need to implement. Ultimately, I need
to iterate through a large amount of data and am wondering if perhaps
I should encapsulate the data in objects (which closer represents the
underlying data) or if I should encapsulate it in arrays. Based on
what I'm seeing in this benchmark script, it seems like it should be
the latter...
Advice and/or input would be much appreciated!
thnx,
Christoph
<?php
class TestObj
{
private $sVar1;
private $sVar2;
private $sVar3;
private $aVar4;
public function __construct()
{
}
public function setVar1( $sValue )
{
$this->sVar1 = $sValue;
}
public function setVar2( $sValue )
{
$this->sVar2 = $sValue;
}
public function setVar3( $sValue )
{
$this->sVar3 = $sValue;
}
public function setVar4( $aValue )
{
$this->aVar4 = $aValue;
}
}
$iMaxIterations = rand( 1, 123456 );
$iMaxElements = rand( 1, 10 );
$aMasterArraysArray = array();
$aMasterObjsArray = array();
$aWorkingTmp = array();
for( $i = 0; $i <= $iMaxElements; $i++ )
{
$aWorkingTmp[] = 'Testing';
}
$iStartTime = microtime( TRUE );
for( $i = 0; $i < $iMaxIterations; $i++ )
{
$aTmp = array();
$aTmp['var1'] = rand();
$aTmp['var2'] = rand();
$aTmp['var3'] = rand();
$aTmp['var4'] = $aWorkingTmp;
$aMasterArraysArray[] = $aTmp;
}
$iEndTime = microtime( TRUE );
$iArrayTotalTime = ( $iEndTime - $iStartTime );
echo $iArrayTotalTime . ' seconds elapsed for [' . $iMaxIterations .
'] iterations for ARRAY.<br>';
$iStartTime = microtime( TRUE );
for( $i = 0; $i < $iMaxIterations; $i++ )
{
$oTmp = new TestObj();
$oTmp->setVar1( rand());
$oTmp->setVar2( rand());
$oTmp->setVar3( rand());
$oTmp->setVar4( $aWorkingTmp );
$aMasterObjsArray[] = $oTmp;
}
$iEndTime = microtime( TRUE );
$iObjectTotalTime = ( $iEndTime - $iStartTime );
echo $iObjectTotalTime . ' seconds elapsed for [' . $iMaxIterations
. '] iterations for OBJECTS.<br><br>';
if( $iArrayTotalTime > $iObjectTotalTime )
{
echo 'Arrays took [' . ( $iArrayTotalTime - $iObjectTotalTime ) .
'] seconds longer,
a factor of [' . ( $iArrayTotalTime / $iObjectTotalTime ) . ']<br>';
}
else
{
echo 'Objects took [' . ( $iObjectTotalTime - $iArrayTotalTime ) .
'] seconds longer,
a factor of [' . ( $iObjectTotalTime / $iArrayTotalTime ) . ']<br>';
}
?>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php