Bir php komut dosyası bellek boşaltarak hakkında soru

6 Cevap php

Ben sadece bir komut dosyası bu gördüm

mysql_free_result($rawdb);

Ben bir yere bir senaryo üzerinde gördüm, o bir mysql sorgu koştu ve bir dizi sonuçları kaydedilmiş, sağ dizisine ekledikten sonra, ben ücretsiz mysql sorgudan kullanılan bellek varsayıyorum bu da koştu.

Ben sadece doğrulamak için soruyorum, bunu yapmak için iyi bir fikir mi? Ben bir dizi, ben ondan sonra bu kodu çalıştırmak gerektiği kaydedilen büyük bir sonuca dönmek etti mysql sorguları var?

Ayrıca performans bilinçli bir ortamda onlarla bittiğinde büyük oturumları ve değişkenleri unset iyi bir uygulamadır?

6 Cevap

Kimden manual:

mysql_free_result() only needs to be called if you are concerned about how much memory is being used for queries that return large result sets. All associated result memory is automatically freed at the end of the script's execution.

Ben bu konuda endişe olmaz. Tüm sonuç kaynaklar yazısının sonunda kurtulmuş, ve large sonuç kümesi sorguları yaparken bellek ile ilgili sorunlar yaşıyorsanız sürece, fark önemsiz olacaktır.

O dedi, ben senin kodu ve gördüm mysql_free_result Seni her yerde daha fazla üzerinde kodunda bu kaynağı kullanarak olacak değil emin için bilirdiniz okuma vardı, bu yüzden biraz okunabilirliği ekleyebilirsiniz eğer. ..

O bellek kullanımı ile iyi bir vatandaş yapar gibi, veri soyutlama katmanı içine koymak için iyi bir uygulama düşünürdüm. PHP kodu bir sürü değil, özellikle gibi. :-/

Bellek kullanımı sorunu 5 daha PHP 4 bir sürü kötü oldu, ama hala bir sorun olabilir. Eğer PHP komut izin maksimum bellek yükselterek tutmak (varsayılan 8Mb, ama kullanmak çoğu ortamlar 64Mb bu kadar olması) varsa, o zaman muhtemelen komut dosyası kullanılarak nasıl ve bellek kullanarak fazla düşünmek gerekmektedir. mysql_free_result() bu cephanelik tek parça kullanarak, ama kendi oldukça anlamsızdır. Eğer mysql_unbuffered_query() kullanmak ve mysql_fetch() ile onu almak gibi her satır işlemesi durumunda İşleminiz büyük veri kümeleri çok daha etkin bellek yapılabilir. Ben bu yaklaşımı kullanmak için yeniden yazılmış, veri çok yukarı gitmek işlemek için komut kapasitesini gördüm.

Bu in the PHP API documentation bazı tartışmalar var. Kullanımı durumda bağlı olarak (yani, sen almak konum sonuçlarının boyutu), mysql_free_result() geliştirmek veya performansını düşürebilir. Bu bağlantının altındaki yorumcu dediği gibi, memory_get_usage() Eğer sonuç ya da değil özgür olup olmadığını bir fikir edinmek için arayın. Hiçbir şey aslında kaynak kullanımını inceleyerek yener.

Also in a performance conscious environment is it good practice to unset large sessions and variables when finished with them?

Unutmayın eğer $_SESSION, sen effectivly oturumda bunları silecektir gelen unset değişkenleri: Onlar orada kullanıcı web sitenizin bir sayfa çağırır dahaki sefere olmayacak.

Yani, bu fikri ile dikkatli olmak isteyebilirsiniz: artık ihtiyacınız yok olduğunda sadece $_SESSION verileri silin.

Hakkında unset ting veriler ve / veya mysql_free_result gibi fonksiyonları kullanarak: (I suppose, as PHP is for web-development, and users won't wait hours for pages to load) bellek bu şekilde kurtararak, birkaç yüz milisaniye sadece çalışan sizin komut düşünüyor muhtemelen bir bit overkill: sürece memory_limit ile ilgili hataları alamadım gibi, muhtemelen bakım gerekir.

Fonksiyonu için PHP kılavuzu sayfa sorularınızın çoğuna cevap:

http://us.php.net/manual/en/function.mysql-free-result.php