चूंकि सभी नए आवंटन (बड़ी वस्तुओं के अलावा) हमेशा Gen0 में जाते हैं, जीसी हमेशा निर्दिष्ट पीढ़ी और नीचे से एकत्रित करने के लिए डिज़ाइन किया गया है। जब आप GC.Collect(2)
पर कॉल करते हैं, तो आप जीसी को जेन 0, जेन 1 और जेन 2 से एकत्र करने के लिए कह रहे हैं।
यदि आप निश्चित हैं कि आप बहुत बड़ी वस्तुओं से निपट रहे हैं (ऑब्जेक्ट्स जो आवंटन समय पर LOH पर रखा जा सकता है) सबसे अच्छा विकल्प यह सुनिश्चित करना है कि आप उन्हें शून्य (VB में कुछ भी नहीं) जब आप उनके साथ किया जाता है। LOH आवंटन स्मार्ट होने और ब्लॉक का पुन: उपयोग करने का प्रयास करता है। उदाहरण के लिए, यदि आपने LOH पर 1 एमबी ऑब्जेक्ट आवंटित किया है और फिर इसका निपटारा किया है और इसे शून्य पर सेट किया है, तो आपको 1 एमबी "छेद" के साथ छोड़ा जाएगा। अगली बार जब आप LOH पर कुछ भी आवंटित करते हैं जो 1 एमबी या आकार में छोटे आकार में है, तो वह उस छेद को भर देगा (और इसे तब तक भरना जारी रखें जब तक कि शेष आवंटन शेष स्थान में फिट होने के लिए बहुत बड़ा न हो, उस बिंदु पर एक नया ब्लॉक आवंटित करें।)
ध्यान रखें कि .NET में पीढ़ी भौतिक चीजें नहीं हैं, लेकिन जीसी प्रदर्शन बढ़ाने में मदद के लिए तार्किक अलगाव हैं। चूंकि सभी नए आवंटन Gen0 में जाते हैं, यह हमेशा पहली पीढ़ी एकत्र की जाती है। प्रत्येक संग्रह चक्र जो चलता है, संग्रह से बचने वाली निचली पीढ़ी में कुछ भी अगली उच्चतम पीढ़ी (जब तक कि जेन 2 तक नहीं पहुंच जाता) तक "प्रचारित" होता है।
ज्यादातर मामलों में, जीसी को जेन 0 एकत्र करने से परे जाने की आवश्यकता नहीं है।जीसी का वर्तमान कार्यान्वयन एक ही समय में Gen0 और Gen1 एकत्र करने में सक्षम है, लेकिन यह Gen2 या Gen1 एकत्रित होने पर Gen2 एकत्र नहीं कर सकता है। (.NET 4.0 इस बाधा को बहुत बड़ा सौदा करता है और अधिकांश भाग के लिए, जीसी जेन 2 या जेन 1 को भी एकत्रित किया जा रहा है, जबकि जीसी जेनरेट करने में सक्षम है।)
स्रोत
2009-09-23 22:58:04
आप ऐसा क्यों करना चाहते हैं, यानी जीन 0 या 1 से एकत्र न करें? .NET GC अपने डिवाइस पर छोड़े जाने पर सबसे अच्छा चलाता है। – thecoop
मुझे इसके बारे में पता है। असल में, आप कभी भी जीसी को मैन्युअल रूप से मजबूर नहीं करना चाहते हैं, क्योंकि वे गहन परिचालन हैं। चूंकि यह मामला है, जब मुझे जीसी चलाने की आवश्यकता दिखाई देती है, तो मैं चाहता हूं कि यह पूर्ण जीसी करने के बजाए केवल विशिष्ट पीढ़ी के खिलाफ ही चल सके। मैं जीसी के उपयोग के बारे में और अधिक विशेष होने की कोशिश कर रहा हूं, और यह मुझे नहीं दे रहा है। – DevinB