2008-08-25 18 views
2

Ich habe eine Angewohnheit, meine variable Nutzung auf ein Minimum zu beschränken. Also ich frage mich, ob es irgendeinen Vorteil ist durch die folgende gewonnen werden:Verwenden von MySQLi - das ist besser zum Schließen von Abfragen

$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(); 

Nun, wenn ich mich nicht irre Beispiel 1 sollte effizienter sein als $query ist unset, wenn ich es neu zuweisen, die jede Speicher frei sollte assoziiert damit. Allerdings gibt es eine Methode (MySQLi_Result::free()), die zugeordneten Speicher freigibt - ist das das Gleiche?

Wenn ich ::free() nicht anrufen, um irgendeinen Speicher freizugeben, der mit dem Ergebnis verbunden ist, aber unset es durch die Neuzuweisung der Variable mache ich das gleiche Ding? Ich weiß nicht, wie man solche Dinge protokolliert - hat irgendjemand ein paar Ideen?

Antwort

5

Die manual scheint darauf hinzuweisen, dass Sie immer noch free() verwenden sollten, um den Speicher freizugeben. Ich glaube, die Argumentation ist, dass free() den Speicher in MySQL freigibt, nicht in PHP. Da PHP keine Müllsammlung für MySQL durchführen kann, müssen Sie free() anrufen.

3

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

Beispiel 2 befreit das MySQL-Ergebnis sofort, Freigabe der verwendeten Ressourcen.

Da PHP-Seiten jedoch in der Regel kurzlebig sind und kleine Ergebnismengen enthalten, ist der gespeicherte Speicher trivial. Sie werden eine Verlangsamung nicht bemerken, wenn Sie eine Tonne der Ergebnisse über lange Zeit auf Seiten, die für eine lange Zeit laufen, im Gedächtnis behalten.

Brian, PHP kann Müll sammeln das MySQL-Ergebnis, es passiert einfach nicht sofort. Das Ergebnis liegt im PHP-Speicherpool, nicht im MySQL-Server.

(die Speicherstelle bei ungepufferten Abfragen ist etwas anders, aber sie werden so selten in PHP verwendet, um nicht erwähnenswert zu sein)