.NET में मेमोरी से ArcObjects जारी करने के नियम क्या हैं?


14

क्या मुझे प्रत्येक वस्तु को जारी करने की आवश्यकता है? क्या कुछ स्मृति प्रबंधन मेरे लिए संभाला जाता है?

जवाबों:


18

सबसे विशेष रूप से, हमेशा स्पष्ट रूप से कर्सर जारी करते हैं जब आप उनके साथ होते हैं। मैं कुछ गणना ऑब्जेक्ट भी जारी करता हूं जो डेटाबेस एक्सेस का अर्थ है, उदाहरण के लिए IEnumRelationship जिसे आप IRelationshipClass.GetRelationshipsForObject से प्राप्त करते हैं

इसके अलावा, जब आप बहुत सारे COM इंस्टेंस बनाते हैं जो अल्पकालिक (विशेष रूप से तंग छोरों में) होते हैं, तो उन्हें स्पष्ट रूप से जारी करना भी एक अच्छा विचार है।

ऐसे परिदृश्य भी हैं जब व्यक्तिगत विशेषता (पंक्ति) संदर्भों को जारी करना उचित है। उदाहरण के लिए, यदि आप एक नया जियोडैटाबेस संस्करण बनाते हैं, तो डेटा, सामंजस्य और पोस्ट संपादित करें, बाद में संस्करण को हटाने की कोशिशें विफल हो सकती हैं क्योंकि असंबंधित पंक्तियां हो सकती हैं, जो बदले में उस संस्करण (कार्यक्षेत्र) के संदर्भ में रखें जिसे आप हटाने की कोशिश कर रहे हैं। ज्यादातर, हालांकि, ऐसे परिदृश्य दुर्लभ हैं और आपको अपने दिन-प्रतिदिन के आर्कोबजेक्ट्स विकास में उनके लिए खाते की आवश्यकता नहीं है। यह केवल बाहरी सफाई के साथ कोड को अव्यवस्थित करेगा, जिससे यह कम रखरखाव योग्य होगा।

यह कहना भी महत्वपूर्ण है कि जब .NET रैपर जारी नहीं किए जाते हैं - आरसीडब्ल्यू ऑफ आर्कोबजेक्ट्स को स्पष्ट रूप से जारी नहीं करते हैं जो किसी अन्य प्रबंधित कोड द्वारा उपयोग में हो सकता है। इसका एक उदाहरण - आर्कप में जब IMap जारी नहीं होता है। सामान्य तौर पर, ArcObjects को जारी करने की कोशिश न करें जो आपने नहीं बनाए थे।


6

अधिकांश भाग के लिए .NET कचरा संग्रह अच्छी तरह से काम करता है। ArcObjects में कुछ मामले हैं जो desctructors पर महत्वपूर्ण काम करते हैं और .NET रैपर के गैर-निर्धारक प्रकृति के मुद्दों का कारण बन सकते हैं। यह सहायता विषय प्राथमिक मामलों को शामिल करता है कि वे किस तरह से चिंतित हों और रिलीज़ का प्रबंधन कैसे करें।



2

हमेशा नष्ट करें:

  • ICursors
  • IEnums

कहीं और इस्तेमाल हो रही चीज़ को नष्ट न करने के लिए सावधान रहें।

आज मैंने ESRIs वेबसाइट पर एक दिलचस्प चर्चा पढ़ी जिसमें कर्क ने भाग लिया। अन्य बहुत ही दिलचस्प राय थीं, जैसे कि रिलीज़कॉम ऑबजेक्ट विधि और फ़ाइनलरेल.कॉम.कॉम (या कुछ और)। क्षमा करें, मेरे पास अभी लिंक नहीं है।

कुछ ने IRows जारी करने का भी सुझाव दिया, लेकिन कई सहमत थे कि GC को सीधे उन्हें संभालने देना आसान है।

मैं कभी भी किसी आईजीओमेट्री को रिलीज नहीं करता। किसी ने कोशिश की कि?


1

मैं 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


IServerContext के साथ काम करते समय, अधिक महत्वपूर्ण (अपने .NET RCW को ComReleaser के रूप में जारी करने की तुलना में) उस पर ReleaseContext को कॉल करना है। सबसे अच्छा तरीका यह है कि संदर्भ को एक .NET वर्ग में लागू किया जाए जिसमें IDis प्रयोज्य लागू हो (और अंतिम कार्यान्वयन को लागू करने सहित मानक निपटान पैटर्न)
पेट्र क्रेब्स

@Petr Yes releaseContext बहुत बड़ा है और ऐसा कुछ है जिसे मैंने नजरअंदाज नहीं किया है, लेकिन बाकी सभी के लिए इसे लिखने के लिए धन्यवाद।
स्टीव

2
मेरा मानना ​​है कि ComReleaser एक 32bit असेंबली का हिस्सा है जिसका अर्थ है कि आप ComReleaser को 64bit प्रक्रिया (जैसे ArcGIS सर्वर) में चलाने में सक्षम नहीं होंगे। मैं एक SOE लिख रहा था और इस पर जल गया।
bcollins

सर्वर जारी करने के लिए अन्य विकल्प हैं?
VBAHole

@VBAHole नहीं कि मैंने देखा है। 10.5.1 पर भी।
स्टीव

0

IWorkspace ऑब्जेक्ट मत भूलना। ESRI देव शिखर सम्मेलन में कुछ साल पहले, मैंने सवाल पूछा था, और ESRI का जवाब ICursor और IWRspace वस्तुओं था।


कार्यक्षेत्रों को जारी करने का कोई मतलब नहीं है क्योंकि वे कार्यक्षेत्र कारखाने के एकल द्वारा कैश किए जाते हैं।
प्रेस्टन

0

क्या SOI में कर्सर की तरह सर्वर ऑब्जेक्ट के साथ काम करते समय नियम भिन्न होते हैं? मैं ComReleaser का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह मेरे SOI कोड में विधि के पास कहीं भी हर बार विफल हो जाता है


मौजूदा प्रश्न के उत्तर के रूप में एक प्रश्न पोस्ट न करें। मौजूदा प्रश्न के लिंक के साथ इसे एक नए प्रश्न के रूप में पोस्ट करें।
ब्योर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.