Bonjour,
J'ai constaté que faire un foreach sur un rowset de "300 000" éléments prenait 28 secondes.
Par contre, si on fait un :
$tab = $rowset->toArray();
et qu'on effectue un foreach sur $tab, on retombe alors à 1 sec !
Est-ce normal ?
Version imprimable
Bonjour,
J'ai constaté que faire un foreach sur un rowset de "300 000" éléments prenait 28 secondes.
Par contre, si on fait un :
$tab = $rowset->toArray();
et qu'on effectue un foreach sur $tab, on retombe alors à 1 sec !
Est-ce normal ?
Salut
Tu sais sans doute que foreach sur un objet (c'est le cas ici) oblige PHP à utiliser des méthodes spéciales de l'objet, donc plusieurs appels de méthode à chaque itération ? L'objet sur lequel tu utilises foreach implémente l'interface Iterator :
http://julien-pauli.developpez.com/t...php/spl/#LII-A
En revanche, foreach sur un tableau est bien plus rapide à exécuter, c'est naturel.
Je te propose de lancer une session de débogage avec un point d'arrêt sur foreach, et d'explorer ainsi ce qu'il se passe au moment où tu rentres dans la boucle pour comprendre ce qu'il se passe en interne dans ZF.
Merci, oui je sais que faire un foreach sur un rowset fait appel à la SPL de php.
Je m'inquiétais simplement du résultat, que je trouve un peu exagéré quand même :)
Entre temps, je suis tombé sur ce lien (benchmarks de la SPL) :
http://www.roothack.org/content/php5...nal-benchmarks
ça me rassure un peu (j'avais peur que ce soit un défaut de configuration PHP).
ps : "non je ne ferais plus d'aggrégation de données à partir de rowset volumineux..."
Il aurait été intéressant que tu prenne en compte le temps d'éxécution de cette commande :
$tab = $rowset->toArray();
pour avoir une bonne comparaison entre les 2 méthodes .
Est ce que $tab = $rowset->toArray(); suivis d'une boucle foreach est plus rapide qu'un foreach directement sur l'objet $rowset ? pas sur.
Il ne faut jamais comparer 2 choses si une des variables est mise de coté.