2012-05-13 15 views
5

हम सभी जानते हैं कि पुन: उपयोग को बढ़ावा देने वाली छोटी विधियों को बनाने का अच्छा अभ्यास है, जो अनिवार्य रूप से ढेर पर कई विधियों को लगाएंगे। हालांकि क्या परिदृश्य तक पहुंचना संभव है जहां इतने सारे नेस्टेड विधियां हैं कि StackOverflow अपवाद होता है?क्या स्टैक आकार और संभावित ओवरफ़्लो के मामले में बहुत अधिक विधियां हो सकती हैं?

स्वीकृत समाधान केवल स्टैक आकार को बढ़ाने के लिए होगा?

documentation states कि ऐसा अपवाद "बहुत गहरा या असंबद्ध रिकर्सन" के दौरान होगा, इसलिए यह निश्चित रूप से संभव लगता है, या .NET ढांचे गतिशील रूप से हमारे लिए स्टैक आकार को संभालता है?

मेरा प्रश्न की तरह तो अभिव्यक्त किया जा सकता: यह है कि (छोटे पुन: प्रयोज्य तरीकों में से संदर्भ में) necassary हो जाता है ढेर आकार में वृद्धि करने के लिए और इसलिए

यह संभव इस तरह के एक अच्छी तरह से डिजाइन कार्यक्रम है करने के लिए है अधिक संसाधनों का उपयोग करें?

उत्तर

2

वास्तव में नहीं। मैंने अभी एक बहुत ही त्वरित परीक्षण किया है, और 15,000 नेस्टेड कॉल के बाद एक स्टैक ओवरफ्लो एक्सेप्शन होता है।

कोई तरीका नहीं है कि आप कोड लिख रहे होंगे जो आपके पास बहुत अधिक तरीकों के कारण 15,000 बार गैर-पुनरावर्ती घोंसला होगा।

स्पष्ट रूप से सटीक संख्या स्टैक पर आवंटित कई फ़ंक्शन-स्थानीय चर पर निर्भर करती है। लेकिन जो भी वास्तविक संख्या हो सकती है, वह आपके द्वारा सुझाए जा रहे कार्यों को करने के लिए पर्याप्त नहीं है।

3

.NET स्टैक आकार तय किया गया है, और डिफ़ॉल्ट रूप से 1 एमबी है।

यह इस तरह के एक अच्छी तरह से डिजाइन कार्यक्रम (छोटे पुन: प्रयोज्य तरीकों के संदर्भ में) कि आवश्यक हो जाता है है ढेर आकार बढ़ाने के लिए और इसलिए अधिक संसाधनों का उपयोग करना संभव है?

यह आपके तर्कों को विधियों में अपनाने में नहीं होगा।

एकमात्र तरीका आपको एक स्टैक ओवरफ़्लो का सामना करना पड़ेगा जो प्रत्यक्ष बग नहीं है, रिकर्सन के साथ है। और जब ऐसा होता है (धमकी देता है), स्टैक को बढ़ाएं लेकिन डेटा को स्टोर करने के लिए अलग-अलग तरीके का उपयोग करने के लिए कोड को फिर से लिखें (जैसे Stack<T>)।

0

प्रबंधित दुनिया में ढेर के प्रदर्शन के लिए एक विशेष भूमिका है। यदि आप ढेर पर कुछ आवंटित करने का प्रबंधन करते हैं (प्राइमेटिव्स या structs का उपयोग करके) आपको इसे ढेर पर रखना नहीं है। ढेर पर आवंटित जीसी दबाव जोड़ता है जो औसतन कार्यक्रम को धीमा करता है।

तो मैं एक प्रोग्राम को चित्रित कर सकता हूं जो ढेर पर बहुत सारी चीजें आवंटित करके तेज़ है। यहां तक ​​कि स्टैकलोक (जो सी #/सीएलआर की कम ज्ञात विशेषता है) का उपयोग कर रहा है।

ऐसा करने के लिए वैध मामले हैं। वे दुर्लभ हैं। बस कह रहा है "कोई मान्य उपयोग नहीं है" सादा गलत है।

+0

क्या आप वाकई सही सवाल का जवाब दे रहे हैं? –

+0

@ महमूद अल-कुडसी - मैं सहमत हूं, यह नहीं है कि मैं –

+0

@ एम.एडमंडसन से पूछ रहा था, क्या आप जो जानना चाहते हैं उस पर विस्तार कर सकते हैं? मैंने पिछले पैराग्राफ में आपके द्वारा किए गए प्रश्न का उत्तर दिया: क्या इस तरह के कार्यक्रम के वैध कारण हैं जिनके लिए स्टैक आकार में वृद्धि की आवश्यकता है। मैंने इसके कारण दिए।क्या मैंने कुछ गलत समझा? – usr

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