MySQLi の使用 - クエリを閉じるのに適しています。
質問
私は変数の使用を最小限に抑える習慣があります。そこで、次のようなメリットがあるのではないかと考えています。
$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();
私が正しければ、例 1 は次のように効率的になるはずです。 $query
は unset
再割り当てすると、それに関連付けられているメモリが解放されるはずです。ただし、方法はあります(MySQLi_Result::free()
)関連するメモリを解放します - これは同じことですか?
電話しなかったら ::free()
結果に関連付けられたメモリを解放しますが、 unset
変数を再割り当てすることで同じことをしているのでしょうか?この種のことをログに記録する方法がわかりません。誰かアイデアを持っていますか?
解決
の マニュアル まだ使用する必要があることを示唆しているようです free()
記憶を解放するために。その理由は次のとおりだと思います free()
のメモリを解放しています MySQL, 、PHPではありません。PHP は MySQL のガベージコレクトを実行できないため、次の呼び出しを行う必要があります。 free()
.
他のヒント
例1 解離する MySQL の結果からの $query 変数。MySQL の結果はメモリ内にまだ存在しており、ガベージ コレクションが発生するまで存在し続けてメモリを無駄にします。
例 2 自由にする MySQL の結果を即座に取得し、使用されたリソースを解放します。
ただし、PHP ページは通常、結果セットが小さく存続期間が短いため、節約されるメモリはわずかです。出発しない限り速度の低下に気付かない トン 長時間実行されるページで長期間にわたってメモリ内に保存された結果の割合。
ブライアン、Php できる MySQL の結果をガベージ コレクションしますが、それはすぐには行われません。結果は、MySQL サーバーのメモリ プールではなく、PHP のメモリ プールに保存されます。
(バッファリングされていないクエリを使用する場合のメモリの局所性は若干異なりますが、PHP ではほとんど使用されないため、言及する価値はありません)