जवाबों:
सबसे विशेष रूप से, हमेशा स्पष्ट रूप से कर्सर जारी करते हैं जब आप उनके साथ होते हैं। मैं कुछ गणना ऑब्जेक्ट भी जारी करता हूं जो डेटाबेस एक्सेस का अर्थ है, उदाहरण के लिए IEnumRelationship जिसे आप IRelationshipClass.GetRelationshipsForObject से प्राप्त करते हैं ।
इसके अलावा, जब आप बहुत सारे COM इंस्टेंस बनाते हैं जो अल्पकालिक (विशेष रूप से तंग छोरों में) होते हैं, तो उन्हें स्पष्ट रूप से जारी करना भी एक अच्छा विचार है।
ऐसे परिदृश्य भी हैं जब व्यक्तिगत विशेषता (पंक्ति) संदर्भों को जारी करना उचित है। उदाहरण के लिए, यदि आप एक नया जियोडैटाबेस संस्करण बनाते हैं, तो डेटा, सामंजस्य और पोस्ट संपादित करें, बाद में संस्करण को हटाने की कोशिशें विफल हो सकती हैं क्योंकि असंबंधित पंक्तियां हो सकती हैं, जो बदले में उस संस्करण (कार्यक्षेत्र) के संदर्भ में रखें जिसे आप हटाने की कोशिश कर रहे हैं। ज्यादातर, हालांकि, ऐसे परिदृश्य दुर्लभ हैं और आपको अपने दिन-प्रतिदिन के आर्कोबजेक्ट्स विकास में उनके लिए खाते की आवश्यकता नहीं है। यह केवल बाहरी सफाई के साथ कोड को अव्यवस्थित करेगा, जिससे यह कम रखरखाव योग्य होगा।
यह कहना भी महत्वपूर्ण है कि जब .NET रैपर जारी नहीं किए जाते हैं - आरसीडब्ल्यू ऑफ आर्कोबजेक्ट्स को स्पष्ट रूप से जारी नहीं करते हैं जो किसी अन्य प्रबंधित कोड द्वारा उपयोग में हो सकता है। इसका एक उदाहरण - आर्कप में जब IMap जारी नहीं होता है। सामान्य तौर पर, ArcObjects को जारी करने की कोशिश न करें जो आपने नहीं बनाए थे।
अधिकांश भाग के लिए .NET कचरा संग्रह अच्छी तरह से काम करता है। ArcObjects में कुछ मामले हैं जो desctructors पर महत्वपूर्ण काम करते हैं और .NET रैपर के गैर-निर्धारक प्रकृति के मुद्दों का कारण बन सकते हैं। यह सहायता विषय प्राथमिक मामलों को शामिल करता है कि वे किस तरह से चिंतित हों और रिलीज़ का प्रबंधन कैसे करें।
हमेशा नष्ट करें:
कहीं और इस्तेमाल हो रही चीज़ को नष्ट न करने के लिए सावधान रहें।
आज मैंने ESRIs वेबसाइट पर एक दिलचस्प चर्चा पढ़ी जिसमें कर्क ने भाग लिया। अन्य बहुत ही दिलचस्प राय थीं, जैसे कि रिलीज़कॉम ऑबजेक्ट विधि और फ़ाइनलरेल.कॉम.कॉम (या कुछ और)। क्षमा करें, मेरे पास अभी लिंक नहीं है।
कुछ ने IRows जारी करने का भी सुझाव दिया, लेकिन कई सहमत थे कि GC को सीधे उन्हें संभालने देना आसान है।
मैं कभी भी किसी आईजीओमेट्री को रिलीज नहीं करता। किसी ने कोशिश की कि?
मैं ESRI.ArcGIS.ADF.ComReleaser का उपयोग करूंगा। कहा जा रहा है कि मैं निश्चित रूप से निश्चित नहीं हूं कि कौन सी आर्क ऑब्जेक्ट एक नियतात्मक रिलीज पैटर्न का उपयोग करते हैं लेकिन मैं इसे ज्यादातर IServerContext ऑब्जेक्ट के साथ संलग्न करता हूं क्योंकि यह सबसे महत्वपूर्ण है।
using (ComReleaser comReleaser = new ComReleaser())
{
}
यहाँ कुछ जानकारी है जिसे मैं 2011 के एस्री डेवलपर शिखर सम्मेलन में प्राप्त करने में सक्षम था।
जो बड़ी सूची मुझे याद आ रही थी, वह सिंगलटन ऑब्जेक्ट्स के लिए थी (जो मदद में नीचे दो विषय हैं)।
यह .NET में आर्कओबजेक्ट्स का उपयोग करने के लिए सर्वोत्तम प्रथाओं से लिंक है। "COM संदर्भ जारी करना" विषय: http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp_index.html#/Releasing_COM_references/0001000004tm000000/
और यहाँ जियोडैटेबेस ब्लॉग पर एक चौदह चर्चा में एक पोस्ट है जिसमें वस्तुओं की एक सूची है: http://blogs.esri.com/dev/blogs/geodatabase/archive/2010/05/18/what_2700_up‑with -comreleaser_3f00_.aspx
(अंत में url didnt काम के मामले में मदद करने के लिए एक लिंक के साथ एक ब्लॉग पोस्ट) http://blogs.esri.com/dev/blogs/geodatabase/archive/2008/12/18/use‑the‑comreleaser‑toadmanage -इस-जीवन-ऑफ-द कर्सर-इन-.net.aspx
IWorkspace ऑब्जेक्ट मत भूलना। ESRI देव शिखर सम्मेलन में कुछ साल पहले, मैंने सवाल पूछा था, और ESRI का जवाब ICursor और IWRspace वस्तुओं था।
क्या SOI में कर्सर की तरह सर्वर ऑब्जेक्ट के साथ काम करते समय नियम भिन्न होते हैं? मैं ComReleaser का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह मेरे SOI कोड में विधि के पास कहीं भी हर बार विफल हो जाता है