Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Esistono diverse circostanze in cui è importante che un'applicazione mantenga basso l'utilizzo della memoria. Gli eventi personalizzati consentono all'applicazione di usare la memoria solo per gli eventi gestiti.
Per impostazione predefinita, quando una classe dichiara un evento, il compilatore alloca memoria per un campo per archiviare le informazioni sull'evento. Se una classe ha molti eventi inutilizzati, occupano memoria inutilmente.
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 EventHandlerList classe , archiviata nel Events campo , per archiviare le informazioni sugli eventi in uso. La EventHandlerList classe è una classe elenco ottimizzata progettata per contenere delegati.
Tutti gli eventi nella classe usano il Events campo 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