4 votes

Pourquoi un ordre de test différent donne-t-il des résultats différents ?

J'ai changé l'ordre de test et j'ai obtenu un résultat différent. J'ai essayé de désactiver le cache opcode, ajouté unset, mais j'obtiens toujours un résultat différent. Pourquoi ?

http://snipplr.com/view/759/

$time_start = microtime(true);

$myArray = array();

for ( $i = 0; $i < 100000; ++$i )
{
   $myArray[] = $i;
   $myArray[] = 'test a string';
}

$time_end = microtime(true);
printf("Took %f seconds for array[]\n", $time_end - $time_start);

$time_start = microtime(true);

$myArray = array();

for ( $i = 0; $i < 100000; ++$i )
{
   array_push($myArray, $i);
   array_push($myArray, 'test a string');
}

$time_end = microtime(true);
printf("Took %f seconds for array_push\n", $time_end - $time_start);

A pris 0.145872 secondes pour array[] A pris 0.154502 secondes pour array_push

$time_start = microtime(true);

$myArray = array();

for ( $i = 0; $i < 100000; ++$i )
{
   array_push($myArray, $i);
   array_push($myArray, 'test a string');
}

$time_end = microtime(true);
printf("Took %f seconds for array_push\n", $time_end - $time_start);

$time_start = microtime(true);

$myArray = array();

for ( $i = 0; $i < 100000; ++$i )
{
   $myArray[] = $i;
   $myArray[] = 'test a string';
}

$time_end = microtime(true);
printf("Took %f seconds for array[]\n", $time_end - $time_start);

A pris 0.197076 secondes pour array_push A pris 0.122565 secondes pour array[]

Augmentez le nombre de tests à 500000 :

A pris 0.779719 secondes pour array[] A pris 0.757806 secondes pour array_push

A pris 1.008018 secondes pour array_push A pris 0.494230 secondes pour array[]

Si je change l'ordre des tests, la différence de vitesse est de 2X.

2voto

k102 Points 3481

Je pense à l'utilisation de la mémoire : j'ai ajouté l'écho de la différence de memory_get_usage() (comme l'époque) et j'ai vu ça :

Took 0.108744 seconds for array_push
memory: 32497848
Took 0.151069 seconds for array_push
memory: 320

y

Took 0.061715 seconds for array[]
memory: 32499584
Took 0.058831 seconds for array[]
memory: -40

donc : array_push() semble ne pas nettoyer la mémoire allouée pour le script, et array[] php a besoin d'un certain temps pour allouer de la nouvelle mémoire (je suppose), donc array[] après array_push() n'a pas besoin d'y consacrer du temps, mais array_push() après array[] fait.

ou, peut-être que c'est un délire

ps : donc, pour augmenter les performances il faut appeler une fonction qui consomme beaucoup de mémoire et qui ne fait pas le ménage au début du script ?!!! %|

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X