Kullanarak performans sorunu nelerdir döngü v / s foreach / döngü ya da tam tersi için ise?
Ayrıca php ise foreach döngüsü v / s kullanmak her zaman tercih edilir?
Sen ", dil-agnostik" olarak listelenen ama cevap dil (ya da, daha doğrusu, derleyici) özgü olacaktır.
Teorik olarak, foreach
düzenli for
döngü Kont test etmek için pahalı bir operasyon yapmaya devam ediyor, özellikle gibi hızlı olmasa bile daha hızlı olabilir.
Ayrıca, foreach
normal for
döngü vaktinden kaleminin numarasını bilmeniz gerekir tembel yüklü koleksiyonu için çalışıyor.
foreach
, platform üzerinde biraz daha yavaş olsa bile nihayet, bu fark önemli olacaktır son derece düşüktür, ve bir for
döngüsünden daha much daha rahat olduğunu. Erken optimize etmeyin. (Bu arada, bir süre için. NET için durum, onlar enumerator'ın performansını tidied beri oldu.)
Bir for
döngü ve aynı koşulu ile bir while
döngü eşdeğer olmalıdır - Varsayalım, bir foreach
may daha yavaş olabilir.
foreach
eldeki veri yapısına geçmesi gerekiyor, bu yüzden bir sonraki (ve bakımını devlet) için ne olursa olsun yapının arama sizi yavaşlatabilir.
Bir for
veya while
döngüye el yaptığını konum Ancak, o zaman muhtemelen aynı.
Iyi cevabı, elbette, onu ve zaman deneyin ve cevap aslında ne olduğunu görürsünüz.
Bu yıl eski olduğunu biliyorum, ama ben gelecek Google'cuların için bir şey işaret etmek gerekir:
"Foreach" Yüklediğiniz ve tam olmak üzere gelen çekerek veri gerektirir - örneğin, dizi ilmek zaten bellekte olacaktır olacaktır.
Yalnızca tek bir değer (veri veya yanlış olabilir - döngü devam edip) gerektirir "iken". Doğru döngü Programlama, bir süre döngü yalnızca bir bütün veri setine karşı bir sonraki değer yüklü olması gerekir. Eğer bir işlevi verileri çizmek için while döngüsü programlamak için olsaydı Yani, önemli ölçüde bellek kullanımını kısmak olabilir.
Bir örnek büyük bir milyon satır veri tabanında her satırda yineleme olabilir; foreach kullanarak Eğer bellek hayatta yemek döngü gerçekleştirmek için tüm veri kümesini yüklemek gerekir. ancak yalnızca gerektiğinde sonraki satırı çeker bir işlevi kullanarak, başarıyla döngü tamamlayacak.
Aşağıdaki pseudocode açıklıyor:
function nextrow ()
{
static myquery = sql_query('SELECT * FROM `hugetable`')
return(next_row(myquery));
}
while(row = nextrow()) { ...do stuff... }
PHP döngü çok konuda mimar | ben php için bir makale yazdı. Benim tembel sayısal aralık uzantısını kullanırken bile temelde, ... döngü havai hiçbir önemli etkisi var ki, gösteriyi kriterler.
Eğer bellek ve jeneratör fonksiyonların maliyetleri hariç kez IIRC, foreach, döngü için bir daha 2.9x yavaştır. Eğer döngü içeriğini döngü yükü az 2.9x iseniz, o zaman ne yaptığınızı yeniden isteyebilirsiniz.
Eğer bir dilde ham döngü performansı arayan konum Ayrıca, eğer PHP mutlak son seçenek listenizde olmalı. O ayrı, de uzun çalışan işlemleri için uygun değil, yorumlanır ve oluyor.
Çoğu PHP kodlama dizeleri bitiştirmek sayısız döngülerini israf. Bu erken optimizasyon uyarılara konuşuyor. Ben sadece "echo" ifadelerine virgül ekleyerek performansınızı ikiye katlayabilirsiniz bahis.
Xdebug falan kodunuzu Profili. Lütfen real darboğazları bulmak. Döngü değil. Güven bana. Bu asla.