मैं जो मेरे प्रिज्म आवेदन में स्मृति लीक का कारण बनता है MEF की ओर से जीवन में किसी समस्या के कुछ हद तक सामना किया है से एकत्र होने के लिए।MEF NonShared IDisposable भागों के संदर्भ रहता है, की अनुमति नहीं दे उन्हें जीसी
PartCreationPolicy
के साथ मेरा आवेदन निर्यात दृश्य और दृश्य मॉडल CreationPolicy.NonShared
पर सेट किया जा रहा है। विचारों और ViewModels क्रमशः ViewBase
और ViewModelBase
से विरासत है, जो IDisposable
लागू करता है।
अब, चूंकि मेरे हिस्से IDisposable
लागू करते हैं, इसलिए उनके संदर्भ में कंटेनर रखा जाता है, जिससे उन्हें कचरा कलेक्टर द्वारा रिहा नहीं किया जाता है। MEF documentation on part lifetime के अनुसार, इस डिजाइन के द्वारा होता है:
अनुमति देने के लिए कॉन्फ़िगर किया गया हैकंटेनर भागों के लिए संदर्भ में यह बनाता है पकड़ नहीं होगा जब तक निम्न में से एक सत्य है:
- हिस्सा
Shared
- भाग के रूप में चिह्नित किया गया है लागू
IDisposable
- एक या अधिक आयात recomposition
मैं MEF इन भागों के लिए एक संदर्भ नहीं रख कैसे तो कर सकते हैं? क्या कोई विशेषता है जिसका उपयोग मैं एमईएफ को यह बताने के लिए कर सकता हूं कि मैं नहीं चाहता कि यह मेरे हिस्से का संदर्भ रखे, भले ही यह IDisposable
लागू करता हो?
रणनीतियों ऊपर लेख में चर्चा के दोनों मेरे लिए अच्छा समाधान की तरह लग नहीं है:
ReleaseExport
एक पैरामीटर है, जो मैं कैसे प्रदान करने के लिए पता नहीं है के रूप में एकExport
वस्तु की आवश्यकता है। मेरे पास मेरे विचार का उदाहरण है, लेकिन मेरे पास यह जानने का कोई तरीका नहीं है कि दृश्य बनाने के लिए इस्तेमाल किया गया अनुबंध क्या था।ReleaseExport
के लिए अधिभार होने पर यह बहुत अच्छा होगा, जो कंटेनर द्वारा बनाई गई किसी ऑब्जेक्ट को प्राप्त कर सकता है।- एक बच्चे कंटेनर का उपयोग करते हुए एक प्राकृतिक विकल्प की तरह या तो प्रतीत नहीं होता।
किसी भी मदद की बहुत सराहना की जाएगी।
उत्तर के लिए धन्यवाद और स्वागत retag के लिए धन्यवाद। मुझे लगता है कि 'निर्यात फैक्ट्री' के साथ प्रिज्म के साथ एकीकरण सही तरीका है, हालांकि यह एक सरल अनुरोध के लिए ओवरकिल जैसा लगता है "मुझे कंटेनर में शामिल न करें"। मैंने अभी तक नहीं छोड़ा है - मैं अभी भी इसके लिए एक और सरल और सुरुचिपूर्ण समाधान ढूंढ रहा हूं। –