पिन किया गया वस्तु, एक है कि, कचरा कलेक्टर द्वारा चारों ओर ले जाया जा सकता है अपने पते के अर्थ एक ही है क्योंकि किसी और, आमतौर पर गैर प्रबंधित कोड के कुछ टुकड़े रखा जाना है वस्तु जा रहा है पर निर्भर करता है एक निश्चित स्मृति पते पर।
आमतौर पर कचरा कलेक्टर स्मृति में वस्तुओं को स्थानांतरित करने के स्वतंत्रता है। प्रबंधित कोड में, जैसा कि कचरा कलेक्टर सभी संदर्भों को उपयोग करने की क्षमता है, यह स्वतंत्र रूप से एक वस्तु किसी दूसरे स्थान पर पुन: मैप और फिर उस वस्तु के सभी संदर्भ अपडेट करें कि प्रक्रिया चल कोड के लिए पारदर्शी है सकते हैं। इस तरह, जीसी में कार्यक्रम की स्मृति को व्यवस्थित करने की क्षमता है और यदि आवश्यक हो तो इसे कॉम्पैक्ट करें।
जब कोई गैर-प्रबंधित ऑब्जेक्ट आपके कोड (असुरक्षित वर्गों में) के साथ बातचीत कर रहा है, तो ऐसी स्थिति उत्पन्न हो सकती है जहां आपके कोड और थिंसेप के टुकड़े कहीं कहीं पॉइंटर होता है; - & thinsp; उदाहरण के लिए, मेमोरी के एक टुकड़े में संबोधित आपका कोड जिसे बाहरी COM कॉल द्वारा संभाला जा रहा है। यह स्मृति पुनः मानचित्रित नहीं जा सकता क्योंकि COM कॉल वस्तु उम्मीद कर रही है किसी दिए गए पते में हो सकता है और इस प्रकार के लिए, अगर यह ले जाया गया था, जीसी कि परिवर्तन की COM वस्तु सूचित करने के लिए किसी भी तरह से नहीं होगा, एक पहुँच में जिसके परिणामस्वरूप उल्लंघन या बदतर।
स्रोत
2010-03-22 09:04:26
यह असुरक्षित होने की जरूरत नहीं है। जैसा कि आप देख सकते हैं: बफर = नया बाइट [छवि आकार]; GCHandle जीसीबफर = GCHandle.Alloc (बफर, GCHandleType.Pinned); – Pedro77
इसे पूर्ण विश्वास की आवश्यकता है, हालांकि, जो असुरक्षित कोड के बराबर है। – usr