Disons que nous avons la méthode suivante:L'utilisation de lambdas comme gestionnaire d'événements peut-elle provoquer une fuite de mémoire?
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 classe avec cette méthode est instancié et la méthode PotentialMemoryLeaker
est appelée plusieurs fois, avons-nous une fuite de mémoire?
Y at-il un moyen de décrocher ce gestionnaire d'événements lambda après que nous ayons fini d'appeler MethodThatFiresAnEvent
?
Comme indiqué dans les réponses ci-dessous, il n'y a pas moyen de le décrochez sans conserver une référence. Cependant, vous pouvez le faire décrocher: http://stackoverflow.com/questions/1747235/weak-event-handler-model-for-use-with-lambdas/1747236#1747236 – Benjol