Verwendung von MySQLi – was sich besser zum Schließen von Abfragen eignet
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?
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.)