Delen via


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

Zie ook