次の方法で共有


方法: カスタム イベントを宣言してメモリを節約する (Visual Basic)

アプリケーションがメモリ使用量を少ない状態に保つことが重要な場合は、いくつかの状況があります。 カスタム イベントを使用すると、アプリケーションは処理するイベントに対してのみメモリを使用できます。

既定では、クラスがイベントを宣言すると、コンパイラはイベント情報を格納するフィールドのメモリを割り当てます。 クラスに未使用のイベントが多数ある場合、不要にメモリを占有します。

Visual Basic で提供されるイベントの既定の実装を使用する代わりに、カスタム イベントを使用してメモリ使用量をより慎重に管理できます。

この例では、クラスは、EventHandlerList フィールドに格納されている Events クラスの 1 つのインスタンスを使用して、使用中のイベントに関する情報を格納します。 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 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

こちらも参照ください