Si j'ai une application avec seulement un peu de gestionnaires d'événements enregistrés (et les objets en utilisant les événements ne sont pas éliminés jusqu'à ce que l'application est fermée), ai-je vraiment besoin de s'inquiéter à propos de l'annulation de l'inscription de ces gestionnaires? La seule bonne raison que je pouvais voir, c'est qu'il peut être un peu frais généraux supplémentaires si des événements sont en cours de licenciement que vous n'avez pas forcement intéressent (j'.e vous avez plusieurs gestionnaires inscrits à un évènement). Est-il une autre bonne raison? Quelqu'un courir dans des problèmes majeurs, car ils n'ont pas annuler l'enregistrement des événements?
Réponses
Trop de publicités?Si vous avez A
de la publication d'un événement, et B
vous abonnant à un événement (le gestionnaire), alors il y a un problème, de ne pas se désinscrire s' A
va vivre beaucoup plus longtemps que d' B
. Fondamentalement, l'inscription à l'événement signifie qu' A
pouvez toujours voir l' B
, donc l'empêcher d'être nettoyée, et serait toujours le feu des événements sur elle, même si vous avez oublié d'en parler (et peut - Disposed()
).
Par exemple, c'est un problème si A
est un événement statique, et que votre application s'exécute pendant un certain temps après l' B
meurt...
Beaucoup de gens semblent penser qu'il est seulement important de se désabonner à partir d'événements si l'éditeur va survivre à l'abonné. Je n'aime pas cette approche. Un événement abonné qui ne doit pas se détacher de lui-même à partir de l'éditeur crée un méchant dépendances sur le comportement des entités à l'extérieur de l'éditeur et l'abonné. Si une référence à l'éditeur est tenu plus longtemps que prévu, ce qui permettra de conserver l'abonné vivant, avec tous les objets auxquels l'abonné est titulaire d'une référence. Si une grande masse d'objets abandonnés sont reliés entre eux par des gestionnaires d'événements, mais pas de référence existe à l'un d'eux, tous les objets peuvent être emporté par le garbage collector. Si, cependant, quelqu'un, quelque part, de façon inattendue conserve une référence à l'un des objets, qui peuvent empêcher l'un d'eux d'être récupérées.
À mon humble avis, il est beaucoup mieux d'être proactif dans la suppression des gestionnaires d'événements que de les abandonner et de l'espoir que tout est nettoyé. À moins que l'on puisse être certain qu'aucun imprévu références à l'éditeur peut exister, une telle approche est susceptible de "surtout" de travail, mais de causer des fuites de mémoire.