Comment : déclarer des événements personnalisés pour économiser la mémoire (Visual Basic)

Il existe plusieurs circonstances dans lesquelles il est important qu’une application conserve une utilisation faible de la 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 pour un champ destiné à stocker les informations relatives à l'événement. Si une classe comporte de nombreux événements inutilisés, ils occupent inutilement de la mémoire.

Au lieu d’utiliser l’implémentation par défaut des événements fourni par Visual Basic, vous pouvez utiliser des événements personnalisés pour gérer plus soigneusement l’utilisation de la mémoire.

Exemple

Dans cet exemple, la classe utilise une instance de la EventHandlerList classe, stockée dans le Events champ, pour stocker des 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 Events champ pour effectuer 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 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

Voir aussi