venant d'un arrière-plan C / C ++, je suis habitué à faire ma propre collection de déchets - c'est-à-dire des ressources de libération après l'utilisation (c'est-à-dire Je me trouve désatement sorti (surtout ORM ) Variables après les utiliser. Y a-t-il des avantages de cette habitude? P>
Je me remets en train de lire quelque part de temps, que les variables déséquilibrées les marquent pour la suppression de l'attention de la GC de PHP - qui peut aider à l'utilisation des ressources sur le côté serveur - vrai ou faux? P>
[modifier] strong> p>
J'ai oublié de mentionner, j'utilise PHP 5.3, ainsi que la plupart des appels non défini () que je fais sont dans une boucle où je traite plusieurs variables d'ormes «lourdes» p>
7 Réponses :
Si un très gros objet est utilisé tôt dans un script long et que l'objet n'a aucune possibilité de sortir de la portée, alors nonset () code> pourrait aider à l'utilisation de la mémoire. Dans la plupart des cas, les objets sortent de la portée et ils sont marqués pour GC automatiquement. P>
Oui, il peut surtout lorsque vous avez affaire à de grandes tableaux et que le script nécessite beaucoup de temps pour courir. P>
Sans aller chercher une preuve, je vais dire que cela n'a pas vraiment d'importance. La collecte des ordures se produit automatiquement lorsque vous laissez une fonction ou un script se termine. Donc, à moins que vous soyez OK, regarda quelque chose. Voici une bonne citation: p>
"Mémoire de libération - particulièrement grand
Montants - n'est pas gratuit en termes de
temps de processeur, ce qui signifie que si
vous voulez que votre script soit exécuté comme
rapidement possible au détriment de
Ram, vous devriez éviter les ordures
Collection sur de grandes variables tout en
C'est en cours d'exécution, puis laissez PHP le faire en
Masse à la fin du script. " P>
blockQuote>
Pour plus d'informations sur le sujet, consultez les liens fournis dans la première réponse ici. p>
Le PHP GC est généralement suffisant pour que vous n'ayez généralement pas besoin d'appeler non défini () sur des variables simples. Pour les objets Toutefois, le GC ne les détruira que lorsqu'ils quittent la portée et aucun autre objet ne se rapportent à eux. Non défini peut aider à la mémoire dans ce cas. Voir http://us3.php.net/manual/fr/language .references.unset.php P>
Je trouve que si vous avez à 1: p> 2: p> le deuxième exemple que je serais préférable car Il définit clairement la portée et diminue le risque de fuir variables à la portée globale (qui ne sont libérées que à la fin du script). P> EDIT: P> Autres choses à garder à l'esprit est le non défini code> Utilisez beaucoup votre probablement le faire mal em>. Laissez le scoping faire le "désapprètement" pour vous. Considérez les deux exemples:
non défini code> dans PHP coûte plus (CPU) que la collection de déchets de portée normale. Alors que la différence est petite, il va montrer combien d'accent sur l'équipe PHP met sur
non défini code>. Si quelque chose
nonset code> devrait donner à PHP Insight que sur la façon de libérer la mémoire, mais elle ajoute en réalité au temps d'exécution.
nonset code> est vraiment un piratage pour libérer des variables qui ne sont plus nécessaires, sauf si vous faites quelque chose de variables assez complexes, de réutiliser des variables (qui agit comme un
non défini code> sur l'ancienne variable ) et le scoping devrait être tout ce que vous jamais em> besoin. p>
J'ai dû utiliser non défini lorsque vous rencontrez des problèmes de mémoire lors de la boucle et de faire des copies des tableaux. Je dirais que je ne l'utilise pas à moins que vous n'ayez dans cette situation, le GC sera lancé automatiquement. P>