J'arrive à lire ce http://code.google.com/speed /Articles/Optimizizizizizing-PHP.HTML
Il affirme que ce code p> doit être optimisé comme ci-dessous p> Cependant, dans ma compréhension, l'opération d'affectation dans PHP ne crée pas nécessairement une copie en mémoire. p> Ceci n'a qu'une copie de "ABC" en mémoire. p> Il consomme plus de mémoire lorsque une variable est modifiée. P> < Pré> xxx pré> est-ce correct? p> p>
3 Réponses :
devrait être optimisé comme ci-dessous p> blockQuote>
Ce n'est qu'une bonne idée si vous n'avez pas besoin de le stocker, évitant ainsi la consommation de mémoire inutile. Cependant, si vous devez émettre la même chose plus tard, il est préférable de le stocker dans une variable pour éviter un autre appel de fonction. P>
est-ce correct? P> blockQuote>
oui. Ça s'appelle Copy-on-Write. P>
At-il vraiment "consommation de mémoire inutile"? Je veux dire, si $ _Post ['Description'] est 512K, le premier code de bloc consomme-t-il une double mémoire? Je suppose que cela prend la même mémoire, mais la mémoire ne serait pas publiée avant la fin du script.
@Morgan Cheng: $ _ Post ['Description'] code> et
$ Description code> est différent, car
$ Description code> est une copie de
$ € ['Description'] code> auquel vous avez appliqué une modification (
strip_tags code>). Donc, oui, cela prend plus de mémoire que de faire référence à la variable post-poste. En outre, la mémoire n'est pas nécessairement libérée à la fin du script, elle est libérée lorsque la variable est hors de portée.
@NetCoder La mémoire est doublée de toute façon, car les données modifiées doivent être stockées quelque part, aussi brefs. La seule différence est que directement echo code> la valeur de retour de fonction permet de récupérer immédiatement la mémoire, car aucune référence n'existe plus.
Dans le premier exemple, si la variable n'est utilisée qu'une fois, il n'ya pas de point de faire une variable en premier lieu, il suffit d'echo les déclarations le résultat immédiatement, il n'est pas nécessaire de la variable. P>
Dans le deuxième exemple, PHP a quelque chose appelé copie sur l'écriture. Cela signifie que si vous avez deux variables qui indiquent la même chose, elles sont toutes deux pointant sur le même peu de mémoire. C'est jusqu'à ce que l'une des variables soit écrite, une copie est effectuée et la modification est apportée à cette copie. P>
L'auteur a un point dans la mesure où la copie des données dans une variable sera garder ces données en mémoire em> jusqu'à ce que la variable soit Sinon, il n'y a pas de différence dans la consommation de mémoire em> entre les deux méthodes, de sorte que son raisonnement ("copie") est faux. p> non définie code>. Si vous n'avez pas besoin des données plus tard, il est en effet gaspillé la mémoire. P>
Eh bien, les variables seront inchangées automatiquement lorsqu'elles sortent de la portée. Ce que vous mentionnez est vrai dans la programmation procédurale, mais pas vraiment une préoccupation dans une application OO correctement structurée.
@NetCoder accordé, bien sûr. Mais si vous allez générer beaucoup plus de données dans la même portée, cela peut faire la différence entre un script d'exécution et un script de terminaison. :)
Dans votre premier morceau de code, vous ne pouvez pas référencer
$ Description code> plus tard sur? Est-ce que cela implique que la chaîne est stockée en mémoire? Le deuxième morceau, cependant, ne peut plus être référencé. Vous devez réévaluer la fonction une fois de plus pour obtenir la même sortie.