Partilhar via


Como: Declarar eventos personalizados para conservar memória (Visual Basic)

Há várias circunstâncias em que é importante que um aplicativo mantenha seu uso de memória baixo. Os eventos personalizados permitem que o aplicativo use memória somente para os eventos que ele manipula.

Por padrão, quando uma classe declara um evento, o compilador aloca memória para um campo para armazenar as informações do evento. Se uma aula tem muitos eventos não utilizados, eles ocupam desnecessariamente a memória.

Em vez de usar a implementação padrão de eventos que o Visual Basic fornece, você pode usar eventos personalizados para gerenciar o uso de memória com mais cuidado.

Exemplo

Neste exemplo, a classe usa uma instância da EventHandlerList classe, armazenada no Events campo, para armazenar informações sobre os eventos em uso. A EventHandlerList classe é uma classe de lista otimizada projetada para conter delegados.

Todos os eventos na classe usam o Events campo para acompanhar quais métodos estão manipulando 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

Consulte também