Kapanış sorguları için daha iyidir - mysqli kullanma

2 Cevap php

Ben çıplak en az benim değişken kullanımını tutmanın bir alışkanlığı var. Izleyerek elde edilecek herhangi bir avantajı var diye merak ediyorum:

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

Şimdi ben bunu onunla bağlantılı bir belleği boşaltmak hangi atadığınızda 1 $query unset olarak daha verimli olmalıdır sağ Örnek yaşıyorum. Bu aynı şeydir - Ancak (MySQLi_Result::free()) hangi boşaltır ilişkili hafıza bir yöntem var mı?

Ben aramazsan ben aynı şeyi yapıyorum değişken atayarak ::free() sonucu ile ilgili herhangi bir belleği boşaltmak için ama unset? Ben bu tür bir şey günlüğe nasıl bilmiyorum - Herkes bazı fikirleri var mı?

2 Cevap

manual Hala bellek serbest bırakmak için free() kullanılarak gerektiğini önermek gibi görünüyor. Ben akıl free() değil PHP, MySQL olarak bellek boşaltarak olmasıdır inanıyorum. PHP MySQL için çöp toplamak değil olduğundan, free() aramak gerekir.

MySQL sonucu Örnek 1 dissociates $ sorgu değişkeni. MySQL sonuç hala hafızasında var, ve çöp toplama oluşuncaya kadar mevcut ve atık hafıza devam edecek.

Örnek 2 frees MySQL sonuç hemen, kullanılan kaynakları serbest.

PHP sayfaları genellikle kısa ömürlü, küçük sonuç-setleri ile olduğundan Ancak, kaydedilen bellek saçmadır. Eğer uzun bir süre çalıştırmak sayfalarında uzun bir süre boyunca a ton bellekte sonuçları bırakmak sürece bir yavaşlama fark olmaz.

Brian, PHP can garbage collect the MySQL result, it just doesn't happen immediately. The result lives in PHP's memory pool, not in the MySQL server's.

(Tamponsuz sorguları kullanarak bellek yöreden biraz farklı, ama onlar çok nadiren kayda değer olmayabilir olarak PHP kullanılan konum)