the new fire event delegate and c# events memory

c# - new - ¿Es necesario darse de baja de los eventos?



new eventhandler c# (3)

Depende de cuánto tiempo vivan el suscriptor y el editor. Aquí hay un artículo detallado sobre el problema y varios enfoques sobre cómo resolverlo aquí: Resolviendo el problema con eventos: Controladores de eventos débiles

¿Qué tan serio podría ser NO cancelar la suscripción a los eventos en c #? ¿Es una acción obligatoria o aconsejable?


Es importante darse de baja de los eventos. Si no lo hace, entonces el suscriptor no puede ser recolectado en la basura, lo que conduce, en esencia, a una pérdida de memoria. Este es un buen ejemplo de los problemas que puede encontrar si no se da de baja:

http://developers.slashdot.org/article.pl?sid=07/11/17/0552247

Además, podría llevar a problemas de rendimiento, ya que el controlador de eventos continuará siendo llamado aunque ya no esté haciendo nada útil para usted.

Por otro lado, si está terminando la ejecución del programa, entonces no hay razón para darse de baja de los eventos. Ciertamente no es obligatorio, y no veo ninguna razón para recomendarlo.


Esta es la parte importante de la documentación de MSDN que debe tener en cuenta

Para evitar que se invoque su controlador de eventos cuando se produce el evento, simplemente cancele la suscripción del evento. Para evitar fugas de recursos, es importante darse de baja de los eventos antes de deshacerse de un objeto de suscriptor. Hasta que cancele la suscripción a un evento, el delegado de multidifusión que subyace al evento en el objeto de publicación tiene una referencia al delegado que encapsula el controlador de eventos del suscriptor. Mientras el objeto de publicación contenga esa referencia, su objeto de suscriptor no será recolectado como basura.