如何:声明保留内存使用的事件

更新:2007 年 11 月

在几种情况下,应用程序保持低的内存使用率很重要。自定义事件允许应用程序只为它处理的事件而使用内存。

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

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

示例

在本示例中,类使用 EventHandlerList 类的一个实例(存储在 Events 字段中),以存储有关使用中的事件的信息。EventHandlerList 类是一个经过优化的列表类,专为保存委托而设计。

此类中的所有事件均使用 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 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

请参见

任务

如何:声明避免阻止的事件

参考

Event 语句

EventHandlerList