Share via


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)

Referencia

EventHandlerList

Otros recursos

Eventos (Visual Basic)