मैं अपने व्यू मॉडल्स (सिल्वरलाइट और/या डब्ल्यूपी 7 ऐप्स) में आसान ईवेंट हैंडलिंग के लिए प्रतिक्रियाशील एक्सटेंशन का उपयोग कर रहा हूं। के सरलता के जाने के लिए कहते हैं कि मैं अपने वीएम की ctor में इस तरह की एक पंक्ति है:IObservers का निपटारा करने के साथ क्या करना है?
Observable.FromEvent<PropertyChangedEventArgs>(
h => MyObject.PropertyChanged += h,
h => MyObject.PropertyChanged -= h)
.Where(e=>e.PropertyName == "Title")
.Throttle(TimeSpan.FromSeconds(0.5))
.Subscribe(e=>{/*do something*/});
यह एक IDisposable वस्तु, जो यदि निपटारा सदस्यता समाप्त कर देगा देता है।(क्या मैं इस धारणा में सही हूं?)
यदि मेरे पास इसका कोई संदर्भ नहीं है, तो जल्दी या बाद में इसे एकत्र किया जाएगा, और मेरे हैंडलर की सदस्यता समाप्त हो जाएगी।
मेरे पास आमतौर पर मेरे वीएम में List<IDisposable>
है, और मैं इसके लिए सब्सक्रिप्शन जोड़ता हूं, फिर भी मुझे इसके बारे में गंदा लगता है, जैसे कि मैं सही आरएक्स तरीके से कुछ नहीं कर रहा हूं।
सबसे अच्छा अभ्यास है, इस तरह की स्थितियों पर सिफारिश पैटर्न क्या है?
मुझे .NET मेमोरी इवेंट रिसाव के बारे में पता है, फिर भी मैंने इस तथ्य को छोड़ दिया कि इससे कोई फर्क नहीं पड़ता कि IObservable पर्यवेक्षकों को अंतिम रूप देने पर निपटाता है, क्योंकि अंतिम रूप यहां कॉल नहीं किया जाता है ... धन्यवाद! – TDaver
यदि मैं निर्दिष्ट कर रहा था कि 'IObservable' व्यवहार करना चाहिए और इसका उपयोग किया जाना चाहिए, तो मैं यह निर्दिष्ट करता हूं कि प्रत्येक उचित रूप से लिखित उपभोक्ता को किसी भी स्थान पर वापस 'आईडीस्पोजेबल' का संदर्भ रखना चाहिए, और कार्यान्वयन को स्वयं को स्वतंत्र मानना चाहिए (यदि प्रोत्साहित नहीं किया जाता है) किसी भी सदस्यता को रद्द करें जिसका संबद्ध 'आईडीस्पोजेबल' गुंजाइश से बाहर हो गया। –
supercat