Procedure: Aangepaste gebeurtenissen declareren om geheugen te besparen (Visual Basic)
Er zijn verschillende omstandigheden waarin het belangrijk is dat een toepassing het geheugengebruik laag houdt. Met aangepaste gebeurtenissen kan de toepassing alleen geheugen gebruiken voor de gebeurtenissen die worden verwerkt.
Wanneer een klasse een gebeurtenis declareert, wijst de compiler standaard geheugen toe voor een veld om de gebeurtenisgegevens op te slaan. Als een klasse veel ongebruikte gebeurtenissen heeft, nemen ze onnodig geheugen in beslag.
In plaats van de standaard implementatie te gebruiken van gebeurtenissen die Visual Basic biedt, kunt u aangepaste gebeurtenissen gebruiken om het geheugengebruik zorgvuldiger te beheren.
Opmerking
In dit voorbeeld gebruikt de klasse één exemplaar van de EventHandlerList klasse, opgeslagen in het Events
veld, om informatie op te slaan over de gebeurtenissen die in gebruik zijn. De EventHandlerList klasse is een geoptimaliseerde lijstklasse die is ontworpen voor gedelegeerden.
Alle gebeurtenissen in de klasse gebruiken het Events
veld om bij te houden welke methoden elke gebeurtenis verwerken.
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