10
votes

Dois-je me désabonner tous les gestionnaires d'événements?

du designer en VS Disons que vous double cliquez sur un bouton et génère ce gestionnaire d'événements de clic.

Le code d'abonnement est dans le concepteur.cs.

Je me demandais, dans le formulaire, je dois me désabonner l'événement?

En outre, tout contrôle sous la forme sera-t-il disposé lorsque les formulaires disposent? Il appelle effectivement éliminer chaque contrôle récursivement?


0 commentaires

3 Réponses :


15
votes

Vous n'avez pas besoin de décrocher l'événement sur le dispositif si vous accrochez votre propre événement.

Il vous suffit d'inquiéter à ce sujet si vous accrochez un événement dans un autre objet. La raison en est que les crochets d'événement conservent une référence à l'abonné. Si vous échouez à décrocher, vous n'obtiendrez pas les ordures recueillies tant que l'observable est toujours en vie.

Lorsque vous accrochez votre propre événement, vous avez une référence à vous-même, qui est circulaire, donc vous n'avez pas besoin de vous en soucier.

Je suis venu soutenir des modèles d'événements plus lâchés pour cette raison. C'est la place n ° 1 pour les fuites de mémoire dans .NET. Je préfère le Agrégateur d'événement motif (avec événements faibles ).


1 commentaires

Merci pour l'excellente explication. Fait un sens idéal pour ne pas décrocher quand vous vous accrochez à vous-même.



1
votes

Tant que le code du gestionnaire d'événements est le formulaire lui-même, vous n'avez pas besoin de vous désabonner des événements - car il n'y aurait pas de gestionnaire d'événements pendling aux commandes que la forme elle-même serait la destruction


0 commentaires

2
votes

sur la question "appellera-t-il réellement éliminer à chaque contrôle de manière récursive?", la réponse est oui.

Un test simple peut être effectué en mettant un point d'arrêt dans la méthode d'élimination d'un contrôle. < Pré> xxx


0 commentaires