Digamos que tenemos el siguiente método:¿El uso de lambdas como controladores de eventos causa una pérdida de memoria?
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();
}
Si la clase con este método se crea una instancia y el método PotentialMemoryLeaker
se llama varias veces, ¿tenemos pérdida de memoria?
¿Hay alguna manera de desenganchar ese controlador de eventos lambda después de que terminemos de llamar al MethodThatFiresAnEvent
?
Como se indica en las respuestas a continuación, no hay forma de desengancharlo sin conservar una referencia. Sin embargo, puede hacer que se desenganche: http://stackoverflow.com/questions/1747235/weak-event-handler-model-for-use-with-lambdas/1747236#1747236 – Benjol