Comment : déclarer des événements qui économisent l'utilisation de la mémoire
Mise à jour : novembre 2007
Il existe plusieurs situations où il est important pour une application d'économiser l'utilisation de sa mémoire. Les événements personnalisés permettent à l'application d'utiliser la mémoire uniquement pour les événements qu'elle gère.
Par défaut, lorsqu'une classe déclare un événement, le compilateur alloue de la mémoire à un champ pour stocker les informations sur l'événement. Si une classe contient plusieurs événements inutilisés, ceux-ci utilisent de la mémoire inutilement.
Au lieu d'utiliser l'implémentation d'événements par défaut fournie par Visual Basic, vous pouvez utiliser des événements personnalisés pour gérer plus consciencieusement l'utilisation de la mémoire.
Exemple
Dans cet exemple, la classe utilise une instance de la classe EventHandlerList, qui est contenue dans le champ Events, pour stocker les informations sur les événements utilisés. La classe EventHandlerList est une classe de liste optimisée conçue pour contenir des délégués.
Tous les événements de la classe utilisent le champ Events pour assurer le suivi des méthodes qui gèrent chaque événement.
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
Voir aussi
Tâches
Comment : déclarer des événements qui évitent les blocages