2010-01-04 14 views
5

मेरे पास एक इटरेटर क्लास है जो डेटाबेस की आभासी और आलसी लोड पर डेटाबेस से आती है जब इसे आवश्यकता होती है (जब यह स्मृति में लोड नहीं होती है)। समस्या यह है कि यह 200,000 बार फिर से चल रहा है और मुझे यहां से पता चला: http://www.garfieldtech.com/blog/magic-benchmarks कि इटरेटर इंटरफ़ेस अविश्वसनीय रूप से धीमा है।PHP आलसी लोड इटरेटर

क्या किसी को भी इटरेटर इंटरफ़ेस का उपयोग किए बिना आलसी लोड के लिए एक अच्छा तरीका पता होगा?

+2

भले ही आप अपने इटरेटर को कच्चे सरणी पहुंच जैसे कुछ स्थानांतरित करने का प्रबंधन करते हैं, फिर भी आप 200,000 से अधिक प्रविष्टियों को फिर से शुरू करने जा रहे हैं। पुनरावृत्ति की आपकी पद्धति शायद आपकी सबसे बड़ी समस्या नहीं है, यह विशाल डेटासेट है जिस पर आप पुन: प्रयास कर रहे हैं। –

+0

मेरी स्थिति में, प्रत्येक मिलीसेकंद एक बड़ा अंतर कर सकता है। उदाहरण के लिए === शून्य के लिए एक सरल is_null फ़ंक्शन को बदलना 2 सेकंड बचाया गया है। – Louis

उत्तर

6

आप एक सादे पुराने for पाश का उपयोग कर सकते हैं।

इटरेटर इंटरफ़ेस धीमा हो सकता है, लेकिन 200,000 डीबी प्रश्नों के दौरान, संभावना बहुत अच्छी है कि आपकी बाधा इटेटरेटर नहीं है। मैं आपके कोड को यह देखने के लिए सुझाव दूंगा कि यह वास्तव में इस स्थिति में अनुकूलन की आवश्यकता है या नहीं।

समय से पहले Optimizatizion एक for पाश और अनुक्रमित और यात्रा के तरीकों के साथ एक सिंगलटन वर्ग का इस्तेमाल किया गया सभी बुरी :)

+0

वास्तव में यह लगभग 10 प्रश्नों का पालन करेगा। प्रत्येक पंक्ति में लगभग 100 वस्तुओं का क्रमबद्ध डेटा होता है। मैंने बहुत प्रोफाइलिंग की है और यह समस्या की तरह दिखता है जब तक कि सरणी एक्सेस समय के साथ समस्या न हो। – Louis

+0

ठीक है, फिर नियमित सरणी पर स्विच करें और लूप के लिए उपयोग करें। किसी भी कोड को देखे बिना, यह सबसे अच्छा विचार है जिसे मैं पेश कर सकता हूं। – Gordon

0

बेस्ट समाधान की जड़ है।

+3

तो मैंने जो किया वह मैंने किया लेकिन फिर स्वीकृति के लिए अपना उत्तर देने का फैसला किया? बहुत दयालु। – Gordon

+0

आपको गॉर्डन के जवाब को छोड़कर रखना चाहिए था। यदि वह आपके प्रश्न का सही उत्तर देने के लिए समय और प्रयास करता है, तो वह अंक का हकदार है। यदि आपके पास मामूली वृद्धि हुई है, तो आपको उन्हें अपने उत्तर के नीचे एक टिप्पणी के रूप में छोड़ देना चाहिए था। – William

+0

मेरा बुरा, पता नहीं क्यों मैंने इसे स्वीकार नहीं किया। ओह ठीक है जैसे आपको अंक की सख्त जरूरत नहीं है: पी – Louis

संबंधित मुद्दे