次の方法で共有


方法 : メモリの使用量を節約するイベントを宣言する

更新 : 2007 年 11 月

アプリケーションによるメモリの使用量を低く抑えることが重要になる場面はいくつもあります。カスタム イベントを使うと、アプリケーションは自分が処理するイベントに対してのみメモリを使用できます。

既定では、クラスでイベントが宣言されると、コンパイラはイベント情報を格納するフィールドのためにメモリを割り当てます。クラスに未使用のイベントが多数含まれると、メモリが不必要に消費されます。

Visual Basic に用意されている既定のイベントの実装を使うのではなく、カスタム イベントを使用することで、メモリの使用量を注意深く管理できます。

使用例

次の例では、クラスが EventHandlerList クラスの 1 つのインスタンスを 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