2010-04-15 13 views
6

सी # का उपयोग कर ऑब्जेक्ट पूलिंग के लिए कब जाना है? कोई भी अच्छा पूर्व ...ऑब्जेक्ट पूलिंग के लिए कब जाना है?

अक्सर इस्तेमाल की जाने वाली वस्तुओं के पूल को बनाए रखने के समर्थक और कॉन क्या हैं और एक नया निर्माण करने के बजाय पूल से एक को पकड़ते हैं?

उत्तर

5

केवल दो प्रकार के संसाधन हैं जो मैं सोच सकता हूं कि आमतौर पर पूल किए जाते हैं: थ्रेड और कनेक्शन (यानी डेटाबेस में)।

इनमें से दोनों में एक अत्यधिक चिंता है: कमी।

  • यदि आप बहुत सारे धागे बनाते हैं, तो संदर्भ-स्विचिंग आपके सभी CPU समय को बर्बाद कर देगी।
  • यदि आप बहुत से नेटवर्क कनेक्शन बनाते हैं, तो कनेक्शन को बनाए रखने का ओवरहेड कनेक्शन से जो कुछ भी करना चाहिए उससे अधिक काम करता है।
  • इसके अलावा, डेटाबेस के लिए, लाइसेंसिंग कारणों के लिए कनेक्शन गणना सीमित हो सकती है।

तो मुख्य कारण है कि आप एक संसाधन पूल बनाना चाहते हैं, यदि आप केवल एक ही समय में सीमित संख्या में खर्च कर सकते हैं।

4
  1. जब वस्तु निर्माण महंगा
  2. है आप संभावित स्मृति दबाव अनुभव कर सकते हैं जब - जिस तरह से भी कई वस्तुओं (उदाहरण के लिए - फ्लाईवेट पैटर्न)
5

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

एक वास्तविक जीवन उदाहरण तब होता है जब आप कई सॉकेट बनाते और नष्ट करते हैं। डेटा को पढ़ने/लिखने के लिए उपयोग किए जाने वाले बफर को मूल विनसॉक एपीआई में स्थानांतरित करने के लिए पिन किया जाना चाहिए जिसका अर्थ है कि जब कचरा संग्रह होता है, भले ही कुछ स्मृति को सॉकेट के लिए पुनः दावा किया जाता है जहां यह नष्ट हो जाता है - यह छोड़ सकता है एक खंडित राज्य में स्मृति क्योंकि जीसी संग्रह के बाद ढेर को कॉम्पैक्ट नहीं कर सकता है। इस प्रकार पढ़ने/लिखने वाले बफर पूलिंग के लिए प्रमुख उम्मीदवार हैं। इसके अलावा, यदि आप सॉकेटइवेंट आर्ट ऑब्जेक्ट्स का उपयोग कर रहे हैं, तो वे अच्छे उम्मीदवार भी होंगे।

यहां एक good article है जो कचरा संग्रह प्रक्रिया, मेमोरी कॉम्पैक्टिंग और ऑब्जेक्ट पूलिंग के बारे में बात करता है।

0

एरिक ब्राउन http://msdn.microsoft.com/en-us/magazine/cc163856.aspx द्वारा आपके प्रबंधित कोड में रेडिसवर द लॉस्ट आर्ट ऑफ मेमोरी ऑप्टिमाइज़ेशन नामक एक उत्कृष्ट एमएसडीएन पत्रिका लेख है। इसमें एक परीक्षण कार्यक्रम के साथ एक सामान्य उद्देश्य वस्तु पूल शामिल है। यह ऑब्जेक्ट पूल न्यूनतम और अधिकतम आकार का समर्थन करता है। मुझे उत्पादन में इसका उपयोग करने वाले लोगों के लिए कोई संदर्भ नहीं मिल रहा है। क्या किसी ने ऐसा किया है? साथ ही, एएसपी.NET एप्लिकेशन में मेमोरी विखंडन के साथ निपटाया गया है, मैं मिकी दिनेशू के जवाब में मूल्य को प्रमाणित कर सकता हूं। इसके अलावा, विटाली के जवाब पर थोड़ा विस्तार से, बड़ी वस्तुओं (यानी> 85 के) के मामले पर विचार करें जो कि महंगे हैं। बड़ी वस्तुएं केवल जनरल 2 कचरा संग्रह में भाग लेती हैं। इसका मतलब यह है कि उन्हें जेन 0 और जनरल 1 में कचरा संग्रह में पूरी तरह से भाग लेने वाली वस्तुओं के रूप में जल्द से जल्द एकत्र नहीं किया जाएगा। यह आलेख माओनी स्टीफेंस द्वारा http://msdn.microsoft.com/en-us/magazine/cc534993.aspx पर खुलासा किया गया बड़ा ऑब्जेक्ट हीप विस्तार से बड़े ऑब्जेक्ट ढेर को बताता है।

1

खेल के लिए जीसी कुछ स्थितियों में एक अवांछित देरी पेश कर सकता है।यदि ऐसा है, तो वस्तुओं का पुन: उपयोग करना एक अच्छा विचार हो सकता है। this thread में विषय पर कुछ उपयोगी विचार हैं।

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