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

在几种情况下,应用程序保持较低的内存使用率是很重要的。 借助自定义事件,应用程序可以仅将内存用于它处理的事件。

默认情况下,当类声明某个事件时,编译器会为字段分配内存以用于存储事件信息。 如果某个类有许多未使用的事件,它们将不必要地占用内存。

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

示例

在此示例中,该类使用 EventHandlerList 类的一个实例(存储在 Events 字段中),来存储有关正在使用的事件的信息。 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

请参阅