Compartilhar via


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

Há várias circunstâncias quando ele é importante que um aplicativo mantenha seu uso de memória baixa. Eventos personalizados permitem que o aplicativo use memória somente para os eventos que ele gerencia.

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

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

Exemplo

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

Todos os eventos na classe usam o campo Events para manter controle de 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

Tarefas

Como declarar eventos personalizados para evitar bloqueio (Visual Basic)

Referência

EventHandlerList

Outros recursos

Eventos (Visual Basic)