Gewusst wie: Deklarieren von benutzerdefinierten Ereignissen, um Speicherplatz zu sparen (Visual Basic)

Es gibt mehrere Umstände, wenn es wichtig ist, dass eine Anwendung die Speicherauslastung niedrig hält. Benutzerdefinierte Ereignisse ermöglichen es der Anwendung, nur arbeitsspeicher für die Ereignisse zu verwenden, die sie behandelt.

Wenn eine Klasse ein Ereignis deklariert, weist der Compiler standardmäßig Arbeitsspeicher für ein Feld zu, um die Ereignisinformationen zu speichern. Wenn eine Klasse über viele nicht verwendete Ereignisse verfügt, nehmen sie keinen Arbeitsspeicher in Anspruch.

Anstatt die Standardimplementierung von Ereignissen zu verwenden, die Visual Basic bereitstellt, können Sie benutzerdefinierte Ereignisse verwenden, um die Speichernutzung sorgfältiger zu verwalten.

Beispiel

In diesem Beispiel verwendet die Klasse eine Instanz der Klasse, die EventHandlerList im Events Feld gespeichert ist, um Informationen zu den verwendeten Ereignissen zu speichern. Die EventHandlerList Klasse ist eine optimierte Listenklasse, die zum Halten von Stellvertretungen entwickelt wurde.

Alle Ereignisse in der Klasse verwenden das Events Feld, um nachzuverfolgen, welche Methoden jedes Ereignisses behandeln.

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

Siehe auch