Cómo: Declarar eventos personalizados para conservar memoria (Visual Basic)
Hay varias circunstancias en las que es importante que una aplicación mantenga un bajo uso de memoria. Los eventos personalizados permiten a la aplicación utilizar memoria sólo para los eventos que controla.
De manera predeterminada, cuando una clase declara un evento, el compilador asigna memoria para que un campo almacene información de eventos. Si una clase tiene muchos eventos no usados, ocupan memoria inútilmente.
En lugar de utilizar la implementación predeterminada de los eventos que Visual Basic proporciona, puede utilizar los eventos personalizados para administrar más cuidadosamente el uso de memoria.
Ejemplo
En este ejemplo, la clase utiliza una instancia de la clase EventHandlerList, almacenada en el campo Events, para guardar información sobre los eventos que están en uso. La clase EventHandlerList es una clase de lista optimizada diseñada para contener delegados.
Todos los eventos de la clase usan el campo Events para realizar un seguimiento de qué métodos está controlando cada evento.
Public Class MemoryOptimizedBaseControl
' Define a delegate store for all event handlers.
Private Events As New System.ComponentModel.EventHandlerList
' Define the Click event to use the delegate store.
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
Events.AddHandler("ClickEvent", value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Events.RemoveHandler("ClickEvent", value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
CType(Events("ClickEvent"), EventHandler).Invoke(sender, e)
End RaiseEvent
End Event
' Define the DoubleClick event to use the same delegate store.
Public Custom Event DoubleClick As EventHandler
AddHandler(ByVal value As EventHandler)
Events.AddHandler("DoubleClickEvent", value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Events.RemoveHandler("DoubleClickEvent", value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
CType(Events("DoubleClickEvent"), EventHandler).Invoke(sender, e)
End RaiseEvent
End Event
' Define additional events to use the same delegate store.
' ...
End Class
Vea también
Tareas
Cómo: Declarar eventos personalizados para evitar bloqueos (Visual Basic)