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