Condividi tramite


Procedura: dichiarare gli eventi per preservare l'utilizzo della memoria

Aggiornamento: novembre 2007

In molte circostanze è importante che l'utilizzo della memoria da parte di un'applicazione sia mantenuto a livelli ridotti. Gli eventi personalizzati consentono all'applicazione di utilizzare la memoria soltanto per gli eventi che gestisce.

Per impostazione predefinita, quando una classe dichiara un evento, il compilatore assegna della memoria a un campo per l'archiviazione delle informazioni sull'evento. Se una classe comprende molti eventi inutilizzati, essi consumano inutilmente memoria.

Anziché utilizzare l'implementazione predefinita degli eventi fornita da Visual Basic, quindi, è possibile utilizzare gli eventi personalizzati per gestire in modo più oculato l'utilizzo della memoria.

Esempio

In questo esempio, la classe utilizza un'istanza della classe EventHandlerList, archiviata nel campo Events, per memorizzare informazioni sugli eventi in uso. La classe EventHandlerList è una classe elenco ottimizzata progettata per contenere delegati.

Tutti gli eventi della classe utilizzano il campo Events per tenere traccia di quali metodi stanno gestendo ciascun evento.

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 Click 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

Vedere anche

Attività

Procedura: dichiarare gli eventi per evitare il blocco

Riferimenti

Istruzione Event

EventHandlerList