2009-04-22 13 views
9

क्या प्रत्येक सी # प्रोग्राम के लिए कोई ऐपडोमेन है भले ही हम विशेष रूप से ऐपडोमेन नहीं बनाते? इसकी आवश्यकता क्यों है? मैंने पूरे आवेदन को दुर्घटनाग्रस्त करने के बारे में तीसरे पक्ष के असेंबली के बारे में पढ़ा है यदि हम उन्हें अलग-अलग ऐपडोमेन में लोड नहीं करते हैं। मुझे वह बिंदु ठीक से नहीं मिला। क्या कोई इसे भी समझा सकता है।क्या प्रत्येक सी # प्रोग्राम के लिए कोई ऐपडोमेन है?

उत्तर

15

AppDomain एक प्रक्रिया की तरह बहुत अधिक है, यह एक बुनियादी ढांचा है जिसमें आपका एप्लिकेशन चलता है। एक .NET असेंबली को AppDomain में चलाने के लिए लोड करने की आवश्यकता है। तीसरे पक्ष के असेंबली को अलग-अलग AppDomains में लोड करने की आवश्यकता नहीं है, लेकिन यदि आप ऐसा करते हैं, तो यह उनके बीच अलगाव प्रदान करता है (दो अलग प्रक्रियाओं की तरह) और एक में खराब होने से दूसरे को प्रभावित नहीं होगा। एप्लिकेशन डोमेन स्वतंत्र रूप से अनलोड किया जा सकता है।

उदाहरण के तौर पर, SQL सर्वर AppDomain एस का उपयोग सीएलआर असेंबली को अपनी प्रक्रिया में सुरक्षित रूप से लोड करने के लिए करता है।

2

प्रत्येक एप्लिकेशन में कम से कम एक एप्लिकेशन डोमेन है, हां।

मुझे नहीं पता कि तृतीय पक्ष असेंबली के बारे में क्या नोट है।

1

प्रत्येक कार्यक्रम के लिए कम से कम एक ऐपडोमेन है जिसे आप जितना चाहें उतना बना सकते हैं लेकिन आपको शायद ही कभी एक से अधिक की आवश्यकता होगी।

मूल रूप से एक कंटेनर जहां एक विशेष ट्रस्ट के साथ चल रहा कोड चल रहा है।

1

एक डिफ़ॉल्ट ऐप डोमेन है जहां आपका एप्लिकेशन लोड हो जाता है (प्रत्येक उदाहरण अपना स्वयं का हो जाता है)।

क्रैश चीज का अर्थ है कि एक तृतीय पक्ष असेंबली (यानी एक प्लगइन) क्रैश होने पर आपके पूरे एप्लिकेशन को क्रैश कर देगा यदि आप इसे एक अलग ऐप डोमेन में लोड नहीं करते हैं। इसलिए प्लगइन को एक अलग ऐप डोमेन में लोड करना अच्छा अभ्यास है, क्योंकि ऐप डोमेन में एक क्रैश केवल उस ऐप डोमेन को क्रैश करेगा, न कि अन्य डोमेन। CLR Add-In blog के बारे में कुछ पोस्ट हैं।

ध्यान देने योग्य एक महत्वपूर्ण बात यह है कि एक ऐप डोमेन को एक ही प्रक्रिया में या उसी सिस्टम पर होने की आवश्यकता नहीं है, इसलिए आपको इसे मूल रूप से रीमोट करने के लिए आवश्यकता है।

3

मैं दुर्घटना के कारण 3 पार्टी विधानसभाओं के बारे में पढ़ा है कि अगर हम AppDomain

का उपयोग नहीं करते हैं मुझे लगता है कि आप अलग एप्लिकेशन डोमेन के लिए में अन्य विधानसभाओं लोड हो रहा है के बारे में बात कर रहे हैं। इस तरह उन्हें आपके कोड को प्रभावित करने वाले क्रैश को रोकने के लिए आपके पता स्थान से अलग किया जा सकता है। लागत यह है कि एक अलग ऐप डोमेन में एक असेंबली के साथ संवाद करना अधिक कठिन होता है और इसमें एक पेफ पेनल्टी होती है क्योंकि ऐप डोमेन सीमा में सभी कॉलों को मार्शल किया जाना चाहिए।

यह एक काफी अग्रिम विषय है, मैं Richter (अन्य पुस्तकें उपलब्ध नहीं हैं) में पढ़ने की अनुशंसा करता हूं।

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