2009-08-04 5 views
6

संभव डुप्लिकेट:
Loading DLLs into a separate AppDomainसी # - अलग AppDomain में नेट विधानसभा लोड हो रहा है तो आप अनलोड कर सकते हैं यह

क्या एक अलग AppDomain में एक .NET विधानसभा लोड करने के लिए उचित तरीका है इसलिए आप इसके प्रकार/कक्षाओं तक पहुंच सकते हैं लेकिन फिर भी इसे उतारने में सक्षम हो सकते हैं (और इसे पुनः लोड करें)। C# - Correct Way to Load Assembly, Find Class and Call Run() Method

उत्तर

3

असल में, तुम सिर्फ नए AppDomain बनाते हैं और फिर फोन AppDomain.CreateInstanceAndUnwrap प्रकार बनाने के लिए:

यह इस पिछली चर्चा की स्पर्श रेखा है। इस प्रक्रिया के बारे में यहां एक सरल CodeProject article है।

यहां कुछ चालें हैं। आप कभी भी सीधे प्रकार का संदर्भ नहीं दे सकते (यह आपके वर्तमान ऐपडोमेन में टाइप लोड करेगा), और ऑब्जेक्ट्स को MarshallByRefObj से प्राप्त करना चाहिए। यह आपको "दूरस्थ रूप से" ऑब्जेक्ट का उपयोग करने की अनुमति देगा, जिसका अर्थ है कि इसे अपने ऐपडोमेन में लोड करने से रोकें।

+0

+1 धन्यवाद। प्रत्येक बार जब आप AppDomains को पार करते हैं तो प्रदर्शन दंड कितना बुरा होता है? – BuddyJoe

+1

यह निर्भर करता है। Teh appdomains के बीच गुजरने वाली कुछ भी मूल रूप से क्रमबद्ध होती है। (यह रीमोटिंग के समान ही काम करता है।) आम तौर पर, यदि आपके सभी प्रकार मार्शलबीरफॉबज से निकलते हैं, तो वे केवल "हैंडल" को क्रमबद्ध करेंगे, इसलिए यह काफी तेज़ है। जब आप डेटा पढ़ते हैं, तो डेटा को क्रमबद्ध किया जाएगा, हालांकि, जो चीजों को थोड़ा धीमा कर सकता है। दूसरे एपडोमेन में हमेशा "आंतरिक" रखने की कोशिश करें, और शायद यह एक मुद्दा नहीं होगा। –

+0

ध्यान दें कि दूरस्थ उदाहरण जीवन समय सीमित है। नेट संस्करण के आधार पर, आपको रिमोटिंग के बजाय डब्ल्यूसीएफ का उपयोग करना चाहिए। – Guillaume

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