Condividi tramite


Procedura: dichiarare eventi personalizzati per proteggere la memoria (Visual Basic)

Esistono diverse circostanze in cui è importante che un'applicazione mantenga un utilizzo basso della memoria. Gli eventi personalizzati consentono all'applicazione di usare la memoria solo per gli eventi che gestisce.

Per impostazione predefinita, quando una classe dichiara un evento, il compilatore alloca la memoria per un campo in cui archiviare le informazioni sull'evento. Se una classe ha molti eventi inutilizzati, questi occupano inutilmente la memoria.

Anziché usare l'implementazione predefinita degli eventi forniti da Visual Basic, è possibile usare eventi personalizzati per gestire più attentamente l'utilizzo della memoria.

Esempio

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

Tutti gli eventi nella classe usano il campo Events per tenere traccia dei metodi che gestiscono ogni 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 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

Vedi anche