Freigeben über


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

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, belegt 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 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

Aufgaben

Gewusst wie: Deklarieren von benutzerdefinierten Ereignissen, um eine Blockierung zu vermeiden (Visual Basic)

Referenz

EventHandlerList

Weitere Ressourcen

Ereignisse (Visual Basic)