如何:声明自定义事件以节省内存(Visual Basic)

在某些情况下,应用程序必须保持内存使用率较低。 自定义事件允许应用程序仅对处理的事件使用内存。

默认情况下,当类声明事件时,编译器会为字段分配内存来存储事件信息。 如果某个类包含许多未使用的事件,则它们不需要占用内存。

可以使用自定义事件更仔细地管理内存使用情况,而不是使用 Visual Basic 提供的事件的默认实现。

示例:

在此示例中,该类使用存储在字段中的 EventHandlerListEvents 的一个实例来存储有关正在使用的事件的信息。 EventHandlerList 类是用于保存委托的优化 list 类。

类中的所有事件都使用该 Events 字段跟踪处理每个事件的方法。

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

另请参阅