Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-02-2010 08:52:40

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Boucle avec forward => mémoire

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)


----
Gruiiik !

Hors ligne

 

#2 02-02-2010 09:23:09

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Boucle avec forward => mémoire

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 02-02-2010 10:06:38

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Boucle avec forward => mémoire

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)


----
Gruiiik !

Hors ligne

 

#4 02-02-2010 10:13:16

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Boucle avec forward => mémoire

euh... en ligne de commande tu utilises le MVC ? Bon ça me paraît étrange, mais il doit bien y avoir une raison smile (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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 02-02-2010 10:32:11

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Boucle avec forward => mémoire

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 smile (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) :

Code:

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


----
Gruiiik !

Hors ligne

 

#6 02-02-2010 10:34:51

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Boucle avec forward => mémoire

Avec une limite à 32M, je peux en faire 7000, ca me laisse de la marge smile


----
Gruiiik !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages