Frage

Ich habe die Angewohnheit, meinen variablen Verbrauch auf ein Minimum zu beschränken.Ich frage mich also, ob Folgendes einen Vorteil bringt:

$query = $mysqli->query('SELECT * FROM `people` ORDER BY `name` ASC LIMIT 0,30');

// Example 1
$query = $query->fetch_assoc();

// Example 2
$query_r = $query->fetch_assoc();
$query->free();

Wenn ich recht habe, sollte Beispiel 1 effizienter sein als $query Ist unset Wenn ich es neu zuweise, sollte der damit verbundene Speicher freigegeben werden.Es gibt jedoch eine Methode (MySQLi_Result::free()), wodurch der zugehörige Speicher freigegeben wird – ist das dasselbe?

Wenn ich nicht anrufe ::free() um jeglichen mit dem Ergebnis verbundenen Speicher freizugeben, aber unset Mache ich durch die Neuzuweisung der Variablen dasselbe?Ich weiß nicht, wie man so etwas protokolliert. Hat jemand eine Idee?

War es hilfreich?

Lösung

Der Handbuch scheint darauf hinzudeuten, dass Sie es weiterhin verwenden sollten free() um die Erinnerung freizugeben.Ich glaube, der Grund dafür ist free() gibt den Speicher frei MySQL, nicht in PHP.Da PHP für MySQL keine Speicherbereinigung durchführen kann, müssen Sie aufrufen free().

Andere Tipps

Beispiel 1 dissoziiert die Variable $query aus dem MySQL-Ergebnis.Das MySQL-Ergebnis ist weiterhin im Speicher vorhanden und wird weiterhin vorhanden sein und Speicher verschwenden, bis die Speicherbereinigung erfolgt.

Beispiel 2 befreit das MySQL-Ergebnis sofort und gibt die verwendeten Ressourcen frei.

Da PHP-Seiten jedoch im Allgemeinen nur von kurzer Dauer sind und kleine Ergebnismengen aufweisen, ist die Speichereinsparung trivial.Sie werden keine Verlangsamung bemerken, es sei denn, Sie gehen eine Tonne von Ergebnissen im Speicher über einen längeren Zeitraum auf Seiten, die lange ausgeführt werden.

Brian, Php dürfen Garbage Collection des MySQL-Ergebnisses, es passiert einfach nicht sofort.Das Ergebnis befindet sich im Speicherpool von PHP, nicht im MySQL-Server.

(Die Speicherlokalität bei der Verwendung ungepufferter Abfragen unterscheidet sich geringfügig, sie werden jedoch in PHP so selten verwendet, dass sie nicht der Erwähnung wert sind.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top