Freigeben über


Gewusst wie: Deklarieren von Ereignissen, die Speicherplatz sparen

Aktualisiert: November 2007

Unter gewissen Umständen muss die Speicherauslastung durch eine Anwendung gering gehalten werden. Mit benutzerdefinierten Ereignissen wird es einer Anwendung ermöglicht, Speicher nur für die Ereignisse zu nutzen, die sie behandelt.

Wenn eine Klasse ein Ereignis deklariert, reserviert der Compiler standardmäßig Speicher für ein Feld, in dem Ereignisinformationen gespeichert werden. Wenn eine Klasse viele nicht verwendete Ereignisse aufweist, beanspruchen diese unnötigerweise Speicher.

Statt die von Visual Basic bereitgestellte Standardimplementierung von Ereignissen zu verwenden, können Sie die Speicherauslastung mithilfe benutzerdefinierter Ereignisse sorgfältiger verwalten.

Beispiel

In diesem Beispiel verwendet die Klasse eine Instanz der EventHandlerList-Klasse, die im Events-Feld gespeichert ist, um Informationen über die gegenwärtig verwendeten Ereignisse zu speichern. Die EventHandlerList-Klasse ist eine optimierte Listenklasse zum Speichern von Delegaten.

Alle Ereignisse in der Klasse verwenden das Events-Feld, um nachzuverfolgen, welche Methoden jedes einzelne Ereignis 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 Click 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

Aufgaben

Gewusst wie: Deklarieren von Ereignissen zum Vermeiden einer Blockierung

Referenz

<languageKeyword>Event</languageKeyword>-Anweisung

EventHandlerList