HOW TO:宣告自訂事件以節省記憶體 (Visual Basic)

有幾種情況下,應用程式必須讓記憶體使用量保持最低。 自訂事件可以讓應用程式只針對所處理的事件使用記憶體。

根據預設,當類別 (Class) 宣告事件時,編譯器會為欄位配置記憶體,儲存事件資訊。 如果類別有許多未使用的事件,這些事件其實不需要使用記憶體。

您可以使用自訂事件更謹慎地管理記憶體使用量,而不要使用 Visual Basic 所提供的預設事件實作。

範例

在這個範例中,類別會使用 EventHandlerList 類別的一個執行個體 (儲存在 Events 欄位中),儲存使用中事件的相關資訊。 EventHandlerList 類別為專門設計用於存放委派 (Delegate) 的最佳化清單類別。

類別中的所有事件都會使用 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

請參閱

工作

HOW TO:宣告自訂事件以避免封鎖 (Visual Basic)

參考

EventHandlerList

其他資源

事件 (Visual Basic)