方法 : メモリの使用量を節約するイベントを宣言する
更新 : 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