2012-02-16 31 views
15

यदि कोई Assembly.Load पर कॉल करता है तो क्या यह किसी भी दुष्प्रभाव का कारण बनता है?असेंबली कॉल करने के साइड इफेक्ट्स। कई बार लोड करें

उदा

for (int i = 0; i < N; i++) 
{ 
    Assembly.Load(assemblyStrongName); 
    // ....... 
} 

यह असेंबली को एक बार लोड करता है? मैंने पहले और बाद में AppDomain.CurrentDomain.GetAssemblies() के साथ जांच की है और ऐसा लगता है कि यह एक बार लोड हो गया है (जैसा कि इसे करना चाहिए) लेकिन क्या इसका दुष्प्रभाव है?

एक लंबे समय तक चलने वाले सर्वर एप्लिकेशन में (महीनों/वर्षों के लिए बिना किसी पुनरारंभ के चलाता है) उपरोक्त किसी भी मुद्दे का कारण बनता है?

+2

यदि आपके पास एक प्रणाली है, तो असेंबली की लोडिंग महीनों/वर्षों के लिए सक्रिय रहने का महत्वपूर्ण हिस्सा है, मैं प्रभावित हूं। –

+1

अनुवांशिक - यदि आप मेमोरी लीक का पीछा कर रहे हैं, तो अपने स्रोत कोड को देखने के बजाय लीक होने वाली वास्तविक वस्तुओं की पहचान करने के लिए उपयुक्त टूल का उपयोग करें और यादृच्छिक रूप से अनुमान लगाया जाए कि "रिसाव" हो सकता है। –

+0

@Damien_The_Unbeliever: मैं मेमोरी लीक का पीछा नहीं कर रहा हूं। मैंने अब तक एक असेंबली को मैन्युअल रूप से लोड नहीं किया है, इसलिए यह सिर्फ (प्रोग्रामर) जिज्ञासा था :)। – JohnDoDo

उत्तर

14

यह असेंबली को एक बार लोड करता है?

हां। असेंबली वर्तमान ऐपडोमेन में लोड हो जाती है, और केवल उस ऐपडोमेन में लोड हो जाएगी। इस कई बार कॉल करना केवल मौजूदा असेंबली देता है।

+0

कोई साइड इफेक्ट्स या गॉथस? – JohnDoDo

+3

@ जॉन डोडो नहीं - इसे सिर्फ मौजूदा असेंबली वापस करनी चाहिए। एपडोमेन में एक असेंबली> 1 बार लोड करना असंभव है, और एक बार लोड हो जाने पर, यह कभी भी अनलोड नहीं करेगा (जब तक ऐपडोमेन बंद नहीं हो जाता) –