में AppDomain का उपयोग सी # में AppDomains का सबसे महत्वपूर्ण उपयोग क्या है? अर्थात सब कुछ आप सी # में लिखने एक AppDomain
में कार्यान्वित -सी #
सी #
उत्तर
सबसे महत्वपूर्ण उपयोग अपने कोड एक के लिए किया है। यह काफी महत्वपूर्ण ;-p है
आप अतिरिक्त एप्लिकेशन-डोमेन मतलब हैं:
प्लगइन्स और अन्य अविश्वसनीय कोड का उपयोग करते हैं, यह आप दोनों अलगाव, और उन्हें अनलोड करने के लिए क्षमता (अनुमति देता है आप नहीं कर सकते असेंबली असेंबली - केवल संपूर्ण ऐप-डोमेन)।
मैं वर्तमान में गतिशील रूप से जेनरेट किए गए डीएलएल लोड करने के लिए इसका उपयोग कर रहा हूं, ताकि मैं उन्हें उतार सकूं।
वे आपको विभिन्न कॉन्फ़िगरेशन फ़ाइलों, ट्रस्ट स्तर आदि सेट करने की अनुमति भी देते हैं - लेकिन जटिलता और रिमोटिंग की लागतें जुड़ी हैं।
एमएसडीएन के पास ऐप-डोमेन, here पर एक अनुभाग है।
मैं आपको नहीं बता सकता कि सबसे महत्वपूर्ण उपयोग क्या है, क्योंकि यह स्थिति पर निर्भर करता है।
ऐपडोमेन आपके आवेदन के सैंडबॉक्सिंग भागों के लिए उपयोगी हैं। आप ऐपडोमेन में एक्सटेंशन लोड कर सकते हैं और उन्हें फिर से उतार सकते हैं - कुछ ऐसा जो आप अन्यथा नहीं कर सकते हैं। आप AppDomains के विशिष्ट अधिकार असाइन कर सकते हैं। अलग-अलग ऐपडोमेन में डिफ़ॉल्ट ऑब्जेक्ट्स एक दूसरे तक नहीं पहुंच सकते हैं।
ऐपडोमेन को हल्के प्रक्रियाओं के रूप में देखा जा सकता है क्योंकि वे आपको कई सुविधाएं प्रदान करते हैं। हालांकि, एक प्रक्रिया के विपरीत नए AppDomains के पास डिफ़ॉल्ट रूप से अपना स्वयं का धागा नहीं है। आपको ऐपडोमेन और धागे को स्वयं प्रबंधित करना होगा।
इसके अलावा, ऐपडोमेन्स सभी एक ही प्रबंधित ढेर साझा करते हैं। यह आम तौर पर एक समस्या नहीं है, लेकिन इसमें आश्चर्यजनक प्रभाव हो सकते हैं क्योंकि कुछ उदाहरण जैसे स्ट्रिंग्स को ऐपडोमेन्स के बीच साझा किया जाता है। नियमित उपयोग के लिए यह कोई मुद्दा नहीं है, लेकिन यदि आप लॉकिंग के लिए स्ट्रिंग का उपयोग करते हैं, तो अलग-अलग ऐपडोमेन में थ्रेड एक-दूसरे को प्रभावित कर सकते हैं।
सामान्यतः, यह ऐपडोमेन्स का उपयोग करने के लिए दैनिक कोडिंग अभ्यास नहीं है, इसे एक उन्नत अवधारणा के रूप में कुछ माना जा सकता है .. लेकिन, इस साधारण चीज़ से शुरू करना, "AppDomain" शब्द के पीछे अवधारणाओं को बेहतर ढंग से समझना महत्वपूर्ण है।
आर्किटेक्चर के मामले में, और इसे यथासंभव सरल लेते हुए, ऐपडॉमेन मेमोरी एड्रेसिंग के मामले में भी एक अलगाव कंटेनर है, इसके अंदर किसी एप्लिकेशन द्वारा आवश्यक सभी असेंबली लोड और निष्पादित की जाती हैं, भले ही यह अवधारणा अधिक जटिल हो विवरण में व्याख्या करने के लिए (मुझे आशा है कि यह इतनी गहरी जाने के लिए आपके प्रश्न के बारे में नहीं है)।
वहां से शुरू होने से, ऐपडोमेन क्लास का सबसे पहले एप्लिकेशन से संबंधित निष्पादन एप्लिकेशन डोमेन तक पहुंच प्राप्त करने के लिए उपयोग किया जाता है, यह सिंगलटन संपत्ति कार्यान्वयन AppDomain.CurrentDomain
के माध्यम से किया जा सकता है। इस तरह से यह संभव है:
- लोड किए गए असेंबली तक पहुंच प्राप्त करें;
- ऐपडोमेन-साझा डेटा स्लॉट तक पहुंच प्राप्त करें;
- निर्मित डोमेन में लोड किए गए असेंबली से बनाए गए उदाहरणों को अनचाहे बनाने के मामले में मार्शलिंग का इरादा रखता है।
फिर, AppDomain वर्ग के लिए प्रयोग किया जाता है:
- एक ही प्रक्रिया में और अधिक "डोमेन" बनाने के;
- प्रक्रिया में असेंबली निष्पादित करना;
- ऐपडोमेन की लोडिंग/अनलोडिंग प्रक्रिया का प्रबंधन करें।
यह नई माइक्रोसॉफ्ट ढांचे के कोड के एक दृश्य लेने के लिए उपयोगी हो सकता है (अभी तक जारी नहीं) MEF (Managed Extesibility Framework) जो सही मायने में AppDomains कृतियों की तरह अवधारणाओं पर आधारित है और उतारना, गतिशील लोड विधानसभाओं।
ऐपडोमेन्स के साथ आप क्या कर सकते हैं इसके उदाहरणों और उदाहरणों के एक साधारण उदाहरण के रूप में, मैं यह link साझा कर सकता हूं।
मुझे उम्मीद है कि मैंने आपके प्रश्न का उत्तर दिया है।
+1! – jrharshath
ए सी # ऐपडोमेन एक तार्किक पृथक कंटेनर है जिसमें .NET कोड चलाया जाता है। जब आप कोई .NET कोड चलाते हैं तो यह हमेशा डिफ़ॉल्ट एपडोमेन में चलता है।
यह 30 मिनट यूट्यूब वीडियो What is C# AppDomain ? देखें जो ऐपडोमेन को अधिक विस्तार से बताता है।
लेकिन मुझे अभी भी और अधिक विस्तार से समझाने की कोशिश करते हैं। मान लें कि आपको एक थर्ड पार्टी डीएलएल मिलती है और आप इसे अपने आवेदन में उपयोग करना चाहते हैं। लेकिन आपको यह भी संदेह है कि तीसरे पक्ष के पास कुछ दुर्भावनापूर्ण कोड हो सकता है ताकि आप एक सीमित वातावरण में तीसरे पक्ष के डीएलएल को चलाने के लिए चाहें। जैसे आप नहीं चाहते कि तीसरे पक्ष को आपके सी: ड्राइव या फ़ाइलों को हटाएं और इसी तरह से पहुंचे।
तो आप दो ऐपडोमेन बना सकते हैं जो तीसरे पक्ष के लिए है और एक आपके स्वयं के सी # कक्षाओं के लिए है। तीसरे पक्ष के एपडोमेन के लिए आप सुरक्षा बाधा लागू करेंगे कि यह सी: ड्राइव तक नहीं पहुंच सकता है और आपके सी # डीएलएल के लिए आपके पास एक अप्रतिबंधित ऐप डोमेन होगा।
तारों के बारे में अच्छा नोट। – AgentFire
"AppDomains सभी एक ही प्रबंधित ढेर साझा करते हैं।" क्या इसका मतलब है कि वे स्थैतिक वर्ग या स्थैतिक तरीकों को भी साझा करते हैं? अंत में महान लिंक के लिए – Mathematics