2008-09-25 9 views
29

हाल ही में मैंने देखा कि मेरा आवेदन स्मृति को याद करता है जो कभी जारी नहीं होता है। सीएलआरप्रोफाइलर के साथ प्रोफाइलिंग के बाद मैंने पाया है कि कैसल विंडसर कंटेनर का उपयोग मैं वस्तुओं पर रख रहा हूं। इन ऑब्जेक्ट्स को कॉन्फ़िगरेशन xml में लाइफस्टाइल = "क्षणिक" विशेषता के साथ घोषित किया जाता है।कैसल विंडसर क्षणिक वस्तुओं पर क्यों पकड़ता है?

मुझे पता चला है कि मैंने IWindsorContainer.Release(hangingObject) पर स्पष्ट कॉल किया है, तो यह इसके संदर्भ छोड़ देगा।

यह समस्या पैदा कर रहा है, हालांकि, मुझे उम्मीद नहीं थी कि एक क्षणिक जीवनशैली वस्तु के साथ कैसलविंडसर एक संदर्भ रखेगा और प्रभावी ढंग से रिसाव बनाएगा। यह सभी उपयुक्त स्थानों में स्पष्ट रिलीज कॉल डालने के आसपास जा रहा एक बदमाश और त्रुटि प्रवण कार्य होने जा रहा है।

क्या आपने यह समस्या देखी है, और क्या आपके पास इसके बारे में कोई सुझाव है कि इसके आसपास कैसे जाना है?

उत्तर

20

मुझे लगता है कि यहां दिए गए उत्तरों में एक महत्वपूर्ण बिंदु गुम है - यह व्यवहार रिलीज नीतियों के माध्यम से बॉक्स से कॉन्फ़िगर करने योग्य है - महल प्रोजेक्ट साइट here पर दस्तावेज़ देखें।

कई परिदृश्यों में विशेष रूप से जहां आपका कंटेनर होस्टिंग एप्लिकेशन के जीवनकाल के लिए मौजूद है, और जहां क्षणिक घटकों को वास्तव में ट्रैक करने की आवश्यकता नहीं है (क्योंकि आप अपने कॉलिंग कोड या घटक में निपटान कर रहे हैं जिसे इंजेक्शन दिया गया है सेवा) तो आप रिलीज पॉलिसी को NoTrackingReleasePolicy कार्यान्वयन पर सेट कर सकते हैं और इसके साथ किया जा सकता है।

कैसल से पहले v 1.0 मेरा मानना ​​है कि घटक बोझ लागू किया जाएगा/शुरू की - मदद मिलेगी जो इंजेक्शन निर्भरता आदि के इन मुद्दों में से कुछ के साथ-साथ आसपास निपटान को कम

संपादित करें:

चेक आउट घटक बोझ की अधिक चर्चा के लिए निम्नलिखित पोस्ट।

The Component Burden - Davy Brions

इसके अलावा घटक बोझ विंडसर कंटेनर की official 2.0 release में कार्यान्वित किया जाता।

1

कंटेनर में ऑब्जेक्ट्स पर आप सिंगलटन या क्षणिक की जीवनशैली सेट कर सकते हैं। सिंगलटन ऑब्जेक्ट्स जो मैं समझता हूं उसे एप्लिकेशन के जीवन को समाप्त करना चाहिए, लेकिन मुझे समझ में नहीं आता कि इस व्यवहार की उपयोगीता क्षणिक लोगों के लिए समान है!

कस्टम जीवन शैली ILifestyleManager लागू करके बनाई जा सकती है। शायद ReallyTransient जीवनशैली प्रकार बनाने के लिए इसे उपयुक्त रूप से कार्यान्वित करना संभव है!

2

ध्यान देने योग्य एक बात यह है कि ऐसा लगता है कि यह कैसल ट्रंक में तय किया गया है। R5475 में, हैमेट ने माइक्रोक्रोन में डिफ़ॉल्ट रिलीज नीति को LifecycledComponentsReleasePolicy पर बदल दिया।

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