Postupy: Deklarování vlastních událostí pro konzervaci paměti (Visual Basic)

Existuje několik okolností, kdy je důležité, aby aplikace zachovala nízké využití paměti. Vlastní události umožňují aplikaci používat paměť pouze pro události, které zpracovává.

Ve výchozím nastavení, když třída deklaruje událost, kompilátor přidělí paměť pole pro uložení informací o události. Pokud má třída mnoho nepoužívaných událostí, zbytečně zabírají paměť.

Místo použití výchozí implementace událostí, které Visual Basic poskytuje, můžete použít vlastní události ke správě využití paměti pečlivěji.

Příklad

V tomto příkladu třída používá jednu instanci EventHandlerList třídy uloženou Events v poli k ukládání informací o událostech, které se používají. Třída EventHandlerList je optimalizovaná třída seznamu určená k blokování delegátů.

Všechny události ve třídě používají Events pole ke sledování toho, jaké metody zpracovávají jednotlivé události.

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

Viz také