note 102728 added to class.arrayobject

[email protected]
Newsgroups php.notes
Message-ID <[email protected]>
I was unable to reproduce skrebbel's benchmarks in PHP 5.3.0 on Fedora x86. My benchmarks showed, that foreach iterations over ArrayObjects take about 160 to 175 % of the time of a foreach iteration over an array, nowhere near 20000%. Maybe the performance was improved since skrebbel's post, maybe one of our benchmarks was just badly written.

array  fill         : 0.236281
array  read         : 0.254270
array  iterate      : 0.023582

object fill         : 0.221212
object read         : 0.253145
object iterate      : 0.040560

Code to reproduce:

<?php
require_once "Benchmark/Timer.php";

$bench = array();
$profile = array();
$timer = new Benchmark_Timer(true);

$recordBenchmark = function($stepName) use(&$profile, &$timer) {
    $timer->setMarker($stepName);
    $benchmark = end($timer->getProfiling());
    $profile[$stepName] = $benchmark['diff'];
};

$benchSize = 100000;

foreach(array('array', 'object') as $type) {
    $timer->setMarker('type benchmark start');

    for ($i = 0; $i < $benchSize; $i++) {
        $bench["-$i"] = "$i";
    }
    $recordBenchmark("$type fill");

    for ($i = 0; $i < $benchSize; $i++) {
        $dummy = $bench["$i"];
    }
    $recordBenchmark("$type read");

    foreach($bench as $key => $value) {
    }
    $recordBenchmark("$type iterate");

    $bench = new ArrayObject();
}

foreach($profile as $step => $time) {
    printf("%-20s: %f\n", $step, $time);
}

?>
----
Server IP: 85.214.154.209
Probable Submitter: 92.206.34.53
----
Manual Page -- http://www.php.net/manual/en/class.arrayobject.php
Edit        -- https://master.php.net/note/edit/102728
Del: integrated  -- https://master.php.net/note/delete/102728/integrated
Del: useless     -- https://master.php.net/note/delete/102728/useless
Del: bad code    -- https://master.php.net/note/delete/102728/bad+code
Del: spam        -- https://master.php.net/note/delete/102728/spam
Del: non-english -- https://master.php.net/note/delete/102728/non-english
Del: in docs     -- https://master.php.net/note/delete/102728/in+docs
Del: other reasons-- https://master.php.net/note/delete/102728
Reject      -- https://master.php.net/note/reject/102728
Search      -- https://master.php.net/manage/user-notes.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.