कहें कि हमारे पास निम्न विधि है:घटना हैंडलर के रूप में लैम्बडा का उपयोग कर स्मृति रिसाव का कारण बन सकता है?
private MyObject foo = new MyObject();
// and later in the class
public void PotentialMemoryLeaker(){
int firedCount = 0;
foo.AnEvent += (o,e) => { firedCount++;Console.Write(firedCount);};
foo.MethodThatFiresAnEvent();
}
यदि इस विधि के साथ कक्षा को तुरंत चालू किया गया है और PotentialMemoryLeaker
विधि को कई बार कहा जाता है, तो क्या हम स्मृति को रिसाव करते हैं?
क्या हम MethodThatFiresAnEvent
को कॉल करने के बाद उस लैम्ब्डा ईवेंट हैंडलर को खोलने का कोई तरीका है?
नीचे जवाब में संकेत के रूप में, एक संदर्भ के संरक्षण के बिना यह घृणाजनक कोई रास्ता नहीं है का उपयोग करने के बनाने के लिए। हालांकि, आप इसे अपने आप खोल सकते हैं: http://stackoverflow.com/questions/1747235/weak-event-handler-model-for-use-with-lambdas/1747236#1747236 – Benjol