9
votes

Appelant nonset () dans le script php

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 RAII dans la terre C ++).

Je me trouve désatement sorti (surtout ORM ) Variables après les utiliser. Y a-t-il des avantages de cette habitude?

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?

[modifier]

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»

php

0 commentaires

7 Réponses :


3
votes

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 () 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.


0 commentaires

0
votes

Oui, il peut surtout lorsque vous avez affaire à de grandes tableaux et que le script nécessite beaucoup de temps pour courir.


0 commentaires

0
votes

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 vraiment attaché pour des ressources, ne vous inquiétez pas.

OK, regarda quelque chose. Voici une bonne citation:

"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. "

Pour plus d'informations sur le sujet, consultez les liens fournis dans la première réponse ici.


0 commentaires

0
votes
  • Je pensais que les variables PHP n'ont été conservées que pendant la durée de vie de votre script, il est donc peu probable que votre script soit particulièrement à long terme ou en utilisant beaucoup de mémoire temporaire en une seule étape.
  • Effacement explicitement peut être plus lent que de les laisser tous être automatiquement effacés au démarrage.
  • Vous ajoutez plus de code, ce qui va généralement faire plus de temps plus lent à moins que vous sachiez que cela aide.
  • Optimisation prématurée, en tout cas.

0 commentaires

0
votes

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


0 commentaires

6
votes

Je trouve que si vous avez à non défini Utilisez beaucoup votre probablement le faire mal . Laissez le scoping faire le "désapprètement" pour vous. Considérez les deux exemples:

1: xxx

2: xxx

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).

EDIT:

Autres choses à garder à l'esprit est le non défini 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 . Si quelque chose nonset 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 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 sur l'ancienne variable ) et le scoping devrait être tout ce que vous jamais besoin. xxx


0 commentaires

0
votes

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.


0 commentaires