Da ich aus einem C / C ++ - Hintergrund komme, bin ich es gewohnt, meine eigene Garbage Collection zu machen - also Ressourcen freizugeben, nachdem ich sie benutzt habe (zB RAII in C ++ Land).
Ich finde mich selbst unscharf (meistens ORM ) Variablen nach der Verwendung von ihnen. Gibt es irgendwelche Vorteile dieser Gewohnheit?
Ich erinnere mich daran, vor einiger Zeit irgendwo gelesen zu haben, dass unscharfe Variablen sie zum Löschen für den PHP-GC markiert haben - was die Ressourcennutzung auf der Serverseite unterstützen kann - richtig oder falsch?
[Bearbeiten]
Ich habe vergessen zu erwähnen, ich benutze PHP 5.3, und auch die meisten der unset () -Aufrufe, die ich mache, befinden sich in einer Schleife, in der ich mehrere 'schwere' ORM-Variablen verarbeite
Ich finde, dass wenn Sie%%% verwenden müssen, Ihre wahrscheinlich falsch machen . Lassen Sie Scoping das "Unscharfmachen" für Sie tun. Betrachten Sie die zwei Beispiele:
1:
%Vor%2:
%Vor%Das zweite Beispiel wäre mir vorzuziehen, da es den Umfang klar definiert und das Risiko des Verlusts von Variablen in den globalen Geltungsbereich (die erst am Ende des Skripts veröffentlicht werden) verringert.
BEARBEITEN:
Es ist noch zu beachten, dass die unset
in PHP mehr kostet (CPU) als die normale Garbage-Collection. Während der Unterschied gering ist, zeigt sich, wie wenig das PHP-Team auf unset
setzt. Wenn irgendetwas unset
PHP Einblick geben sollte, wie man Speicher freigibt, erhöht es tatsächlich die Ausführungszeit. unset
ist wirklich nur ein Hack, um Variablen freizugeben, die nicht länger benötigt werden, es sei denn, du tust etwas ziemlich Komplexes, wiederverwendende Variablen (die wie ein natürliches unset
auf der alten Variable wirken) und Scoping sollten alles sein, was du immer brauchen.
Wenn ein sehr großes Objekt früh in einem langen Skript verwendet wird und keine Möglichkeit besteht, dass das Objekt den Gültigkeitsbereich verlässt, kann unset()
bei der Speichernutzung helfen. In den meisten Fällen gehen Objekte nicht in den Geltungsbereich und werden automatisch für GC markiert.
Ohne auf Beweise zu achten, werde ich sagen, dass es nicht wirklich wichtig ist. Die Garbage Collection erfolgt automatisch, wenn Sie eine Funktion verlassen oder ein Skript beendet wird. Also, es sei denn, Sie sind wirklich für Ressourcen gebunden, kümmern Sie sich nicht.
OK, etwas nach oben geschaut. Hier ist ein gutes Zitat:
"Speicher freigeben - besonders groß Beträge - ist nicht frei in Bezug auf Prozessorzeit, was bedeutet, dass wenn Sie möchten, dass Ihr Skript als ausgeführt wird so schnell wie möglich auf Kosten von RAM, du solltest Müll vermeiden Sammlung auf großen Variablen während Es läuft, dann lass PHP es machen Masse am Ende des Skripts. "
Weitere Informationen zum Thema finden Sie in den ersten Antworten hier.
Der PHP GC ist normalerweise gut genug, so dass Sie in der Regel nicht auf einfache Variablen unset () aufrufen müssen. Bei Objekten jedoch wird der GC sie nur zerstören, wenn sie das Zielfernrohr verlassen und keine anderen Objekte auf sie verweisen. Unset kann in diesem Fall mit dem Speicher helfen. Siehe Ссылка
Ich musste Unset verwenden, wenn Sie beim Durchlaufen und Erstellen von Kopien von Arrays auf Speicherprobleme stoßen. Ich würde sagen, benutze es nicht, es sei denn, du bist in dieser Situation und der GC tritt automatisch ein.
Tags und Links php