PHP Objects vs Arrays — Performance comparison while iterating

前端 未结 10 1785
青春惊慌失措
青春惊慌失措 2020-11-27 11:25

I have a huge amount of PHP objects for a neural network for which I have to iterate over and perform some maths on. I was wondering if I would be better off using an associ

10条回答
  •  無奈伤痛
    2020-11-27 12:14

    Based in the code of Quazzle, i ran the next code (5.4.16 windows 64bits):

    ';
      print_r($i);
      echo '
    '; } $t0 = microtime(true); $arraysOf=array(); $inicio=memory_get_usage(); for ($i=0; $i<1000; $i++) { $z = array(); for ($j=0; $j<1000; $j++) { $z['aaa'] = 'aaa'; $z['bbb'] = 'bbb'; $z['ccc'] = $z['aaa'].$z['bbb']; } $arraysOf[]=$z; } $fin=memory_get_usage(); echo '

    arrays: '.(microtime(true) - $t0)."

    "; echo '

    memory: '.($fin-$inicio)."

    "; p($z); $t0 = microtime(true); $arraysOf=array(); $inicio=memory_get_usage(); for ($i=0; $i<1000; $i++) { $z = new SomeClass(); for ($j=0; $j<1000; $j++) { $z->aaa = 'aaa'; $z->bbb = 'bbb'; $z->ccc = $z->aaa.$z->bbb; } $arraysOf[]=$z; } $fin=memory_get_usage(); echo '

    arrays: '.(microtime(true) - $t0)."

    "; echo '

    memory: '.($fin-$inicio)."

    "; p($z); $t0 = microtime(true); $arraysOf=array(); $inicio=memory_get_usage(); for ($i=0; $i<1000; $i++) { $z = new stdClass(); for ($j=0; $j<1000; $j++) { $z->aaa = 'aaa'; $z->bbb = 'bbb'; $z->ccc = $z->aaa.$z->bbb; } $arraysOf[]=$z; } $fin=memory_get_usage(); echo '

    arrays: '.(microtime(true) - $t0)."

    "; echo '

    memory: '.($fin-$inicio)."

    "; p($z); ?>

    And i obtained the next result:

    arrays: 1.8451430797577
    
    memory: 460416
    
    Array
    (
        [aaa] => aaa
        [bbb] => bbb
        [ccc] => aaabbb
    )
    
    arrays: 1.8294548988342
    
    memory: 275696
    
    SomeClass Object
    (
        [aaa] => aaa
        [bbb] => bbb
        [ccc] => aaabbb
    )
    
    arrays: 2.2577090263367
    
    memory: 483648
    
    stdClass Object
    (
        [aaa] => aaa
        [bbb] => bbb
        [ccc] => aaabbb
    )
    

    Conclusion for php 5.4

    1. Class is fasts than Arrays (but marginally).
    2. stdClass is evil.
    3. Class uses less memory than Arrays. (about 30-40% less!!)

    ps: as a note, if the class is defined but the members then, the use of this class is slower. It also uses more memory. Apparently the secret is to define the members

    Update

    I updated from php 5.4 to php 5.5 (5.5.12 x86 windows).

    arrays: 1.6465699672699
    
    memory: 460400
    
    Array
    (
        [aaa] => aaa
        [bbb] => bbb
        [ccc] => aaabbb
    )
    
    arrays: 1.8687851428986
    
    memory: 363704
    
    SplFixedArray Object
    (
        [0] => aaa
        [1] => bbb
        [2] => aaabbb
    )
    
    arrays: 1.8554251194
    
    memory: 275568
    
    SomeClass Object
    (
        [aaa] => aaa
        [bbb] => bbb
        [ccc] => aaabbb
    )
    
    arrays: 2.0101680755615
    
    memory: 483656
    
    stdClass Object
    (
        [aaa] => aaa
        [bbb] => bbb
        [ccc] => aaabbb
    )
    

    Conclusion for php 5.5

    1. For arrays, PHP 5.5 is faster than PHP 5.4, for object it is pretty much the same
    2. Class is slower than Arrays thanks to the optimization of PHP 5.5 and arrays.
    3. stdClass is evil.
    4. Class still uses less memory than Arrays. (about 30-40% less!!).
    5. SplFixedArray is similar to use a Class but it uses more memory.

提交回复
热议问题