Gör så här: Deklarera anpassade händelser för att spara minne (Visual Basic)
Det finns flera omständigheter när det är viktigt att ett program håller minnesanvändningen låg. Med anpassade händelser kan programmet endast använda minne för de händelser som det hanterar.
När en klass deklarerar en händelse allokerar kompilatorn som standard minne för ett fält för att lagra händelseinformationen. Om en klass har många oanvända händelser tar de i onödan upp minnet.
I stället för att använda standardimplementeringen av händelser som Visual Basic tillhandahåller kan du använda anpassade händelser för att hantera minnesanvändningen mer noggrant.
Exempel
I det här exemplet använder klassen en instans av EventHandlerList klassen, som lagras i Events
fältet, för att lagra information om de händelser som används. Klassen EventHandlerList är en optimerad listklass som är utformad för att innehålla ombud.
Alla händelser i klassen använder fältet Events
för att hålla reda på vilka metoder som hanterar varje händelse.
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