उत्तर
इन दोनों संरचनाओं का बिंदु कचरा कलेक्टर को संसाधन जारी करने से रोकने और पी/Invoke कॉल समाप्त होने से पहले हैंडल को अमान्य करने से रोकने के लिए है। आपके द्वारा लिंक किए गए दस्तावेज़ से संकेत मिलता है कि ये इंटरऑप मार्शलर द्वारा मान्यता प्राप्त विशेष प्रकार हैं।
मैं प्रलेखन से जो एकत्र करता हूं वह यह है कि HandleRef
अनिवार्य रूप से अधिक सामान्य GCHandle
संरचना का एक विशेष मामला है।
HandleRef
संरचना विशेष रूप से पी/Invoke कोड के साथ उपयोग किए जाने वाले अप्रबंधित संसाधनों को हैंडल लपेटने के लिए है। उदाहरण के लिए, विंडो हैंडल (HWND
) या डिवाइस संदर्भ (HDC
)। इसमें Handle
संपत्ति है जो IntPtr
का मान देता है, जो अंतर्निहित सिस्टम के आर्किटेक्चर पर पॉइंटर के आकार का एक पूर्णांक मान है। आप इसे & पर आसानी से उपयोग कर सकते हैं इसे आसानी से संभालने वाले हैंडल प्राप्त कर सकते हैं।
जबकि GCHandle
संरचना एक संभाल यह GCHandleType
गणन के सदस्यों में से एक का उपयोग कर लिपट प्रकार निर्दिष्ट कर सकते, HandleRef
संरचना विशेष रूप से अप्रबंधित संसाधनों के हैंडल रैप करने के लिए डिजाइन किया गया था। जब आप Win32 एपीआई काले बक्से के रूप में व्यवहार करते हैं तो विशेष हैंडल की बजाय, आप सीधे अप्रबंधित स्मृति से निपट रहे हैं, तो आप GCHandle
संरचना का उपयोग करेंगे।
या तो इसका उपयोग करना आवश्यक नहीं है। समय-समय पर संसाधन जारी करने से कचरा कलेक्टर को रखने के लिए कोई भी GC.KeepAlive
पर कॉल कर सकता है।
और यहां तक कि शायद यह आवश्यक नहीं है। मैं वर्षों से पी/कोड कोड लिख रहा हूं, और मैंने पाया है कि जब यह सही ढंग से लिखा जाता है, तो इन संरचनाओं में से किसी एक की आवश्यकता नहीं होती है। यदि किसी क्लास ऑब्जेक्ट को कचरा इकट्ठा किया जाता है जबकि एपीआई कॉल निष्पादन के बीच में होता है, तो यह आपके एप्लिकेशन में एक बग है। मैं वास्तव में अपवाद के माध्यम से विफलता के अधिसूचित होने के लिए चाहता हूं, इसे छुपाएं।
एक अंतर यह में दी गई है link आपका उल्लेख किया:
HandleRef मान प्रकार, GCHandle की तरह, एक विशेष प्रकार से मान्यता प्राप्त है इंटरऑप मार्शलर। एक सामान्य, nonpinned GCHandle भी असामयिक कचरा संग्रह को रोकता है, फिर भी हैंडलरफ बेहतर प्रदर्शन प्रदान करता है। हालांकि के लिए ऑब्जेक्ट को जीवित रखने के लिए हैंडलरफ का उपयोग करना प्लेटफ़ॉर्म इनवॉक कॉल की अवधि को प्राथमिकता दी जाती है, आप उसी उद्देश्य के लिए जीसी.किप अलाइव विधि का भी उपयोग कर सकते हैं।
हाँ, मुझे लगता है, लेकिन मुझे विस्तृत जानकारी की आवश्यकता है –
@user: आप और अधिक विस्तृत जानकारी चाहते हैं? –
- 1. # {} $ {} और% {} के बीच क्या अंतर है?
- 2. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 3. $ और $$ के बीच क्या अंतर है?
- 4. के बीच क्या अंतर है:। और: आर !?
- 5. भिन्नता और '-' के बीच क्या अंतर है?
- 6. "$^एन" और "$ +" के बीच क्या अंतर है?
- 7. के बीच क्या अंतर है?
- 8. अंतर और कहां के बीच क्या अंतर है?
- 9. file_get_contents और fread बीच क्या अंतर है
- 10. क्या बीच का अंतर है :: और ::: स्काला
- 11. "। +" और "। +?" के बीच अंतर
- 12. $ {} और # {} के बीच अंतर क्या हैं?
- 13. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 14. अपवाद के .TOString() और मैसेज के बीच क्या अंतर है?
- 15. 7zip के 7z.sfx और 7zsd.sfx के बीच क्या अंतर है?
- 16. डीएल के फाइलवर्सन और उत्पादवर्जन के बीच क्या अंतर है?
- 17. UIImageView के फ्रेम और सीमाओं के बीच क्या अंतर है?
- 18. फ़ायरबग के console.log() और console.debug() के बीच क्या अंतर है?
- 19. पैरामीटर परिभाषाओं के बीच अंतर (प्रकार और नाम), और (प्रकार * नाम) के बीच अंतर क्या हैं?
- 20. ओरिएंटब संस्करणों के बीच क्या अंतर है?
- 21. एन्कोड/डीकोड के बीच क्या अंतर है?
- 22. os.popen() विधियों के बीच क्या अंतर है?
- 23. MATLAB में & &&& के बीच क्या अंतर है?
- 24. ऑब्जेक्ट और * के बीच अंतर?
- 25. इन कार्यों के बीच क्या अंतर है?
- 26. applicationDidReceiveMemoryWarning, didReceiveMemoryWarning के बीच क्या अंतर है?
- 27. इन कार्यों के बीच क्या अंतर है
- 28. window.innerWidth window.outerWidth के बीच क्या अंतर है?
- 29. Response.Write() औरResponse.Output.Write() के बीच क्या अंतर है?
- 30. वीबीए: और + के बीच अंतर
उत्तर –
के लिए धन्यवाद "मैंने पाया है कि जब यह सही ढंग से लिखा जाता है, तो इन संरचनाओं में से किसी के लिए कोई आवश्यकता नहीं है।" क्या होगा यदि आप ऑब्जेक्ट को एकत्र होने से रोकने के बारे में चिंतित नहीं हैं क्योंकि आप जानते हैं कि प्रबंधित कोड इसे संदर्भित रखेगा, लेकिन आप बस किसी भी कारण से प्रबंधित संदर्भों को स्वीकार/रोक/वापस करने के लिए अप्रबंधित कोड चाहते हैं। उदाहरण का उपयोग केस: स्टैक ओवरफ्लो .com/प्रश्न/32105089 –