2011-08-19 12 views
9

मैंने पढ़ा है कि प्रबंधित ढेर में पिनिंग ऑब्जेक्ट्स .NET में जीसी प्रदर्शन को प्रभावित करता है, क्योंकि जीसी "रास्ते में" पिन किए गए ऑब्जेक्ट्स मेमोरी को कॉम्पैक्ट नहीं कर सकता है। लेकिन चूंकि बड़े ऑब्जेक्ट ढेर को किसी भी तरह से संकलित नहीं किया जाता है, इसलिए यह LOH में ऑब्जेक्ट्स पर लागू नहीं होना चाहिए। क्या LOH में किसी ऑब्जेक्ट को पिन करने की कोई और छिपी हुई लागत है? या क्या मैं जीसी प्रदर्शन को कम किए बिना LOH में वस्तुओं को सुरक्षित रूप से पिन कर सकता हूं?क्या LOH में किसी ऑब्जेक्ट को पिन करना जीसी प्रदर्शन को प्रभावित करता है?

उत्तर

5

ठीक है, क्योंकि बड़े ऑब्जेक्ट हीप (LOH) को कॉम्पैक्ट नहीं किया गया है इसका मतलब यह नहीं है कि एकत्र नहीं किया गया है। The LOH is collected और किसी ऑब्जेक्ट को पिन करने से भविष्य के आवंटन पर रैमिकेशन होगा।

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

जब एक निशान कचरा संग्रहण का निशान और झाडू भाग के दौरान किया जाता है, CLR शायद सभी संदर्भ जड़ों के रूप में पिन किए गए होते निशान तो वहाँ शायद संग्रह के इस भाग के दौरान कोई प्रभाव नहीं है, अगर कोई बड़ी वस्तु का संदर्भ रखता है तो यह वही व्यवहार करेगा।

चूंकि डोलोकेशन LOH पर समान होता है (ब्लॉक को बस उपलब्ध होने के रूप में टैग किया जाता है), यह ऑपरेशन या तो प्रभावित नहीं होता है।

और आखिरकार, चूंकि LOH कॉम्पैक्ट नहीं किया गया है, इसलिए यह ऑपरेशन कभी भी जीसी के दौरान इस ढेर पर नहीं होता है, इसलिए यह यहां प्रभावित नहीं होता है।

संक्षेप में, LOH पर आवंटन निश्चित रूप से LOH पर ऑब्जेक्ट्स के संदर्भ पिनिंग से प्रभावित हो सकता है, जबकि LOH पर संग्रह अधिकतर नहीं हैं।

हालांकि यह नहीं भूलना चाहिए कि स्मृति के बड़े ब्लॉक आवंटित करने और धारण करने से सामान्य रूप से सिस्टम पर रैमिकेशंस हो सकते हैं, ये टिप्पणियां सख्ती से LOH के बारे में हैं।

+0

उत्तर के लिए धन्यवाद। मुझे यकीन नहीं है कि मुझे दूसरा अनुच्छेद मिलता है: एक संदर्भ रखने से अधिक उपलब्ध स्मृति को पिनिंग क्यों कम करता है? मैं हमेशा एलओएच पर कुछ आवंटित करने के लिए अनिवार्य रूप से एक मुफ्त मेमोरी ब्लॉक की तलाश में था या एक नया सेगमेंट आवंटित करना चाहता था - यदि हां, तो किसी भी लाइव ब्लॉक का इलाज किया जाना चाहिए, पिन किया गया है या नहीं। – Niki

+0

@nikie: यह अब और नहीं करता है, यह वही प्रभाव है (जैसा कि आपने कहा है)। मैंने तदनुसार अपना जवाब अपडेट कर लिया है। यह एक छोटा, लेकिन महत्वपूर्ण परिवर्तन है। – casperOne

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