2010-02-05 14 views
15

मैं समझता हूं कि ऐपडोमेन क्या है, हालांकि मैं ऐपडोमेन के उपयोगों को पूरी तरह से समझ नहीं पा रहा हूं।ऐप डोमेन के लिए क्या उपयोग किया जाता है?

मैं एक बड़े सर्वर आधारित सी #/सी ++ एप्लिकेशन में शामिल हूं और मैं सोच रहा हूं कि ऐपडॉमेन्स का उपयोग करने से स्थिरता/सुरक्षा/प्रदर्शन में सुधार हो सकता है।

विशेष रूप से:

  • मैं समझता हूँ कि एक गलती या एक डोमेन घातक अपवाद अन्य एप्लिकेशन एक ही प्रक्रिया में चल रहे डोमेन को प्रभावित नहीं करता है - यह भी अप्रबंधित के लिए सच पकड़ है/C++ अपवाद हैं, संभवतः भी ढेर भ्रष्टाचार या अन्य स्मृति मुद्दों।
  • इंटर-ऐपडोमेन संचार कैसे काम करता है?
  • ऐपडोमेन्स का उपयोग कितनी प्रक्रियाओं को आसानी से करने से अलग है?
+1

मैं इस quetion को कम-से-कम 2 में विभाजित करने का सुझाव दूंगा - एक इंटर-ऐपडोमेन संचार के बारे में अपवादों के बारे में। – Mikeon

उत्तर

13

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

व्यक्तिगत रूप से एक असेंबली को अनलोड करने का कोई तरीका नहीं है। तो आपको कुछ भी घर के लिए एक अलग ऐपडोमेन बनाना होगा जिसे अनलोड करने की आवश्यकता हो सकती है।जब आवश्यक हो तो आप पूरे ऐपडोमेन को कचरा और पुनर्निर्माण कर सकते हैं।

वैसे, ढेर को दूषित करने वाला देशी कोड सीएलआर की किसी भी सुविधा से सुरक्षित नहीं किया जा सकता है। आखिरकार सीएलआर को मूल रूप से कार्यान्वित किया जाता है और उसी पते की जगह साझा करता है। तो प्रक्रिया में देशी कोड सीएलआर के सभी आंतरिकों को लिख सकता है! बुरी तरह से व्यवहार करने का एकमात्र तरीका (यानी सबसे अधिक) देशी कोड ओएस स्तर पर वास्तविक प्रक्रिया अलगाव है। Mutiple .exe प्रक्रियाओं को लॉन्च करें और उन्हें कुछ आईपीसी तंत्र के माध्यम से संवाद करें।

+0

मुझे स्पष्टीकरण देना चाहिए - मैं केवल अपने * अपने * मूल कोड का जिक्र कर रहा था! –

1

मैं ऐपडोमेन्स पर एक विशेषज्ञ होने का दावा नहीं कर रहा हूं, इसलिए मेरा जवाब सभी शामिल नहीं होगा। शायद मुझे किसी ऐसे व्यक्ति द्वारा एक महान परिचय के साथ जुड़ना शुरू करना चाहिए जो कुछ हद तक एक विशेषज्ञ के रूप में आती है, और covering all aspects of AppDomain usage जैसा प्रतीत होता है।

ऐपडोमेन्स के साथ मेरा मुख्य मुठभेड़ सुरक्षा क्षेत्र में रहा है। वहां, मैंने पाया है कि सबसे बड़ा लाभ प्रतिबंधित अनुमतियों वाले कई बच्चे डोमेनों को उत्पन्न करने वाले उच्च विश्वास में मास्टर डोमेन चलाने की क्षमता रहा है। उच्च विश्वास में अनुमतियों को प्रतिबंधित करके, ऐप डोमेन के उपयोग के बिना, प्रतिबंधित प्रक्रियाओं के पास अभी भी अपने विशेषाधिकारों को बढ़ाने की अनुमति होगी।

4

असल में, यह सच है कि एक AppDomain में एक महत्वपूर्ण विफलता दूसरों को प्रभावित नहीं कर सकती है। बुरी चीजों के मामले में, प्रक्रिया को फाड़ने के लिए सबसे अच्छा शर्त है। वहाँ कुछ उदाहरण हैं, लेकिन ईमानदारी से मैं उन्हें याद नहीं है - मैं बस एक मानसिक नोट ले लिया "बुरी चीजें = नीचे प्रक्रिया आंसू (जाँच)" AppDomain की

लाभ:

  • आप कर सकते हैं AppDomain अनलोड करें; मैं इसे ऐसे सिस्टम के लिए उपयोग करता हूं जो डेटाबेस से डेटा के आधार पर स्वयं (मेटा-प्रोग्रामिंग) को संकलित करता है - यह कुछ समय के लिए नए डीएलएल को होस्ट करने के लिए एक एपडोमेन को स्पिन कर सकता है, और फिर नया डेटा उपलब्ध होने पर सुरक्षित रूप से स्वैप कर सकता है (और बनाया गया)
  • AppDomain एस के बीच कॉम अपेक्षाकृत सस्ते हैं। IMO यह केवल समय मैं खुश दूरस्थ उपयोग करने के लिए (हालांकि आपको अभी खून बह रहा है उन दोनों के बीच संदर्भ से बचने के लिए वास्तव में सीमा पर वस्तुओं के बारे में सावधान रहने की जरूरत है, "विलय" के कारण प्राथमिक AppDomain में अतिरिक्त DLLs लोड करने के लिए कर रहा हूँ है , एक रिसाव का कारण बनता है) - यह वास्तव में भी आसान है - बस CreateInstanceAndUnwrap (या यह CreateInstanceFromAndUnwrap है?)।
  • बनाम एक अतिरिक्त प्रक्रिया को बनाम - आप किसी भी तरह से जा सकते हैं; लेकिन आप AppDomain काम के लिए एक और exe की जरूरत नहीं है, और यह किसी भी संचारों कि आप की आवश्यकता
6

मैं जेफरी रिचटर द्वारा CLR Via C# की अत्यधिक अनुशंसा करता हूं। विशेष अध्याय 21 में ऐपडोमेन के उद्देश्य और उपयोग के बारे में अच्छी जानकारी मिलती है।

अपने अंक/सवाल का जवाब में

:

  • AppDomains दुष्ट अप्रबंधित कोड से आपके आवेदन की रक्षा नहीं होंगे। यदि यह एक मुद्दा है तो आपको ओएस द्वारा प्रदान की गई पूर्ण प्रक्रिया अलगाव का उपयोग करने की आवश्यकता होगी।

  • ऐपडोमेन्स के बीच संचार अलगाव को लागू करने के लिए .NET remoting का उपयोग करके किया जाता है। यह प्रदर्शन और लचीलापन के बीच एक व्यापार बंद के साथ, मूल्य semantics द्वारा संदर्भ या मार्शल द्वारा मार्शल के माध्यम से किया जा सकता है।

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

0
पूरी तरह से स्वतंत्र कोड को चलाने के लिए

अनुप्रयोग डोमेन अलगाव रणनीति मॉड्यूल, स्मृति साझाकरण और स्थिरता चिंताओं को हल करने के लिए, वास्तविकता की तुलना में भ्रम का अधिक है।

+1

आप जानते हैं, माइक्रोसॉफ्ट ने एएसपी.नेट कोर में ऐपडोमेन हटा दिए हैं ... – docesam

+0

नहीं मैंने नहीं किया, लेकिन अब मैं करता हूं – LastTribunal

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