2010-01-04 82 views
5

我有一個迭代器類,當它需要時(當它沒有加載到內存中時),它循環遍歷一個對象數組,並從數據庫延遲加載。問題是這是迭代大約200,000次,我從這裏發現:http://www.garfieldtech.com/blog/magic-benchmarks迭代器接口非常慢。PHP懶惰加載迭代器

有人會知道沒有使用迭代器接口的惰性負載的好方法嗎?

+2

即使你設法用原始數組訪問替換你的迭代器,你仍然會迭代超過200,000個條目。你的迭代方法可能不是你最大的問題,它是你正在迭代的海量數據集。 – 2010-01-04 07:40:14

+0

在我的情況下,每毫秒可以產生很大的差異。將簡單的is_null函數更改爲=== null,例如保存2秒。 – Louis 2010-01-04 08:09:41

回答

6

您可以使用普通舊for循環。

迭代器接口可能會很慢,但是當進行200.000個數據庫查詢時,機會相當不錯,您的瓶頸不是迭代器。我建議分析你的代碼,看看它是否真的需要在這個位置進行優化。

過早Optimizatizion是萬惡 :)

+0

其實它會做約10個查詢。每行保存大約100個對象的序列化數據。我做了很多分析,這看起來像問題,除非有數組訪問時間的問題。 – Louis 2010-01-04 08:06:36

+0

那麼,切換到常規數組,然後使用for循環。沒有看到任何代碼,這是我可以提供的最好的想法。 – Gordon 2010-01-04 08:43:46

0

最好的解決辦法的根源是使用for環和一個Singleton類的指標和迭代方法。

+3

所以你做了我的建議,但後來決定提供你自己的接受答案?太好了。 – Gordon 2010-09-07 21:54:59

+0

你應該排除戈登的答案。如果他花費時間和精力正確回答你的問題,他應該得分。如果你有輕微的增加,你應該留下他們作爲他的答案下的評論。 – William 2011-06-24 21:59:01

+0

我的不好,不知道爲什麼我不接受它。哦,看起來你並不需要這些要點:P – Louis 2011-06-28 06:42:31