Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Dites, si dans une action je fais un forward vers cette même action, je risque une sur-consomation de mémoire ? (uniquement par le Zend, mes variables perso étant détruite)
Hors ligne
Ca fait un moment que je n'ai pas regardé le code, mais dans les versions autour de 1.5, il n'y avait rien (en tout cas rien de significatif) qui s'accumulait dans un forward. Un forward oublie l'état précédent, il n'y a pas de pile ou de blague comme ça.
Après (mais tu t'en doutes) ça dépend plus de ton code... Il faut vérifier que ton action n'accumule rien, mais il faut aussi vérifier que tes plugins et tes helpers n'accumulent rien (dans les preDispatch et postDispatch). Par défaut, ta vue devrait accumuler les données renvoyées, mais ça j'imagine que c'est le comportement que tu attends...
Si tu veux fouiller toi même pour vérifier, le point de départ c'est la fonction dispatch() de Zend/Controller/Front.php
A+, Philippe
Hors ligne
philippe a écrit:
Ca fait un moment que je n'ai pas regardé le code, mais dans les versions autour de 1.5, il n'y avait rien (en tout cas rien de significatif) qui s'accumulait dans un forward. Un forward oublie l'état précédent, il n'y a pas de pile ou de blague comme ça.
Après (mais tu t'en doutes) ça dépend plus de ton code... Il faut vérifier que ton action n'accumule rien, mais il faut aussi vérifier que tes plugins et tes helpers n'accumulent rien (dans les preDispatch et postDispatch). Par défaut, ta vue devrait accumuler les données renvoyées, mais ça j'imagine que c'est le comportement que tu attends...
Si tu veux fouiller toi même pour vérifier, le point de départ c'est la fonction dispatch() de Zend/Controller/Front.php
A+, Philippe
Je n'accumule rien dans la vue, car je ne fais aucune affectation ; car je suis en ligne de commande (et noViewRenderer à true)
Je crois que je vais revoir qq points de mon code... (je demande, car je peux boucler de nombreuses fois, c'est pas juste 2 ou 3 fois)
Hors ligne
euh... en ligne de commande tu utilises le MVC ? Bon ça me paraît étrange, mais il doit bien y avoir une raison (du genre une réutilisation de code ?)
Je viens de jeter un coup d'oeil sur une version 1.8 je n'ai rien vu qui s'accumulait, mais si tu veux être sur, le seul truc fiable c'est de faire un grosse boucle qui fait rien et de voir si tu as un outofmemory à la fin...
A+, Philippe
Hors ligne
philippe a écrit:
euh... en ligne de commande tu utilises le MVC ? Bon ça me paraît étrange, mais il doit bien y avoir une raison
(du genre une réutilisation de code ?)
Je viens de jeter un coup d'oeil sur une version 1.8 je n'ai rien vu qui s'accumulait, mais si tu veux être sur, le seul truc fiable c'est de faire un grosse boucle qui fait rien et de voir si tu as un outofmemory à la fin...
A+, Philippe
Oui, je réutilise du code (base de donnée, Service), et j'utilise en plus Zend_Soap_Client qui est bien pratique.
Mais, j'ai un router "Cli", une réponse "Cli"...
Bon, j'ai fait le test (mais pas en Cli) :
public function testAction() { static $i = 0; if ($i != 90000) { $i++; $this->_forward('test'); } }
memory_limit placé à 64M :
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 40961 bytes) in /usr/local/share/ZendFramework-1.10.0/library/Zend/Controller/Dispatcher/Standard.php on line 285
Hors ligne
Avec une limite à 32M, je peux en faire 7000, ca me laisse de la marge
Hors ligne