Aufruf von unset () im PHP-Skript

8

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

    
morpheous 06.08.2010, 16:40
quelle

8 Antworten

3

Ich empfehle dies zu lesen

    
Peter Bailey 06.08.2010, 16:48
quelle
5

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.

%Vor%     
Kendall Hopkins 06.08.2010 16:48
quelle
3

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.

    
Ryan Tenney 06.08.2010 16:43
quelle
0

Ja, vor allem, wenn Sie mit großen Arrays arbeiten und Skript viel Zeit zum Ausführen benötigt.

    
Centurion 06.08.2010 16:45
quelle
0

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.

    
Stuart 06.08.2010 16:45
quelle
0
  • Ich dachte, PHP-Variablen würden nur während der Lebensdauer Ihres Skripts erhalten. Es ist daher unwahrscheinlich, dass Sie so viel helfen, wenn Ihr Skript nicht besonders lange läuft oder viel temporären Speicher in einem Schritt verwendet.
  • Das Löschen ist möglicherweise langsamer, als wenn alle beim Start automatisch gelöscht werden.
  • Sie fügen mehr Code hinzu, was die Sache normalerweise langsamer macht, wenn Sie nicht wissen, dass es hilft.
  • Vorzeitige Optimierung in jedem Fall.
tc. 06.08.2010 16:46
quelle
0

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 Ссылка

    
rr. 06.08.2010 16:47
quelle
0

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.

    
Matt Williamson 08.08.2010 05:20
quelle

Tags und Links