Como declarar eventos personalizados para conservar memória (Visual Basic)How to: Declare Custom Events To Conserve Memory (Visual Basic)

Há várias circunstâncias em que é importante que um aplicativo Mantenha seu uso de memória baixo.There are several circumstances when it is important that an application keep its memory usage low. Os eventos personalizados permitem que o aplicativo use a memória apenas para os eventos que ele manipula.Custom events allow the application to use memory only for the events that it handles.

Por padrão, quando uma classe declara um evento, o compilador aloca memória para um campo para armazenar as informações do evento.By default, when a class declares an event, the compiler allocates memory for a field to store the event information. Se uma classe tiver muitos eventos não utilizados, eles ocupam desnecessariamente a memória.If a class has many unused events, they needlessly take up memory.

Em vez de usar a implementação padrão de eventos que Visual Basic fornece, você pode usar eventos personalizados para gerenciar o uso de memória com mais cuidado.Instead of using the default implementation of events that Visual Basic provides, you can use custom events to manage the memory usage more carefully.

ExemploExample

Neste exemplo, a classe usa uma instância da classe EventHandlerList, armazenada no campo Events, para armazenar informações sobre os eventos em uso.In this example, the class uses one instance of the EventHandlerList class, stored in the Events field, to store information about the events in use. A classe EventHandlerList é uma classe de lista otimizada projetada para manter delegados.The EventHandlerList class is an optimized list class designed to hold delegates.

Todos os eventos na classe usam o campo Events para controlar quais métodos estão manipulando cada evento.All events in the class use the Events field to keep track of what methods are handling each event.

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émSee also