2010-01-04 25 views
5

İhtiyaç duyulduğunda (bellekten yüklenmediğinde) bir nesneler dizisi ve tembel bir şekilde yüklenen bir dizi üzerinde döngü yapan bir yineleyici sınıfım var. Sorun bu yaklaşık 200.000 kez yineleniyor ve buradan öğrendim: http://www.garfieldtech.com/blog/magic-benchmarks yineleyici arabiriminin inanılmaz derecede yavaş olduğunu.PHP Lazy Load Iterator

Bir yineleyici arabirimi kullanmadan tembel bir yükleme yapmanın iyi bir yolu olduğunu bilen var mı?

+2

Yineleyicinizi ham dizi erişimi gibi bir şeyle değiştirmeyi başarabilseniz bile, yine de 200.000'den fazla giriş yinede yineleniyor olacaksınız. Yineleme yönteminiz muhtemelen en büyük probleminiz değil, üzerinde tekrarladığınız devasa veri kümesi. –

+0

Durumumda, her milisaniye büyük bir fark yaratabilir. Basit bir is_null işlevinin değiştirilmesi === null örneğin 2 saniye kaydedildi. – Louis

cevap

6

Düz eski for döngüsünü kullanabilirsiniz.

Yineleyici arabirimi yavaş olabilir, ancak 200.000 DB sorgusu yaparken, şansınız oldukça iyi, darboğazız yineleyici değil. Bu pozisyonda gerçekten optimizasyon ihtiyacı olup olmadığını görmek için kodunuzu izlemenizi öneririm.

Erken Optimizatizion endeksler ve yineleme yöntemleri ile bir for döngü ve bir Singleton sınıf kullanmaktı tüm kötü :)

+0

Aslında yaklaşık 10 sorgu yapıyor olacak. Her satır yaklaşık 100 nesnenin serileştirilmiş verilerini tutar. Ben çok profilleme yaptım ve dizi erişim süreleri ile ilgili sorunlar olmadığı sürece bu problem gibi görünüyor. – Louis

+0

Peki, normal dizilere geçin ve bir for döngüsü kullanın. Herhangi bir kod görmeden, sunabileceğim en iyi fikir budur. – Gordon

0

En çözümün köküdür.

+3

bu yüzden önerdiğim şeyi yaptınız ama sonra kabul için kendi cevabınızı vermeye karar verdiniz? Çok nazik. – Gordon

+0

Gordon'un cevabı hariç olmalı. Sorunuzu doğru cevaplamak için zaman ve çaba harcarsa, puanları hak eder. Hafif eklemeler olsaydı, cevabının altında bir yorum olarak bırakmış olmalısın. – William

+0

Kötü, neden kabul etmediğimi bilmiyorum. Oh iyi gözüküyor, çünkü puanlara çok ihtiyacın yok: P – Louis