Практическое руководство. Объявление пользовательских событий для экономии памяти (Visual Basic)
В некоторых случаях важно, чтобы использование памяти приложением было низким. Пользовательские события позволяют приложению использовать память только для событий, которые оно обрабатывает.
По умолчанию, когда класс объявляет событие, компилятор выделяет память под поле для хранения сведений события. Если класс имеет много неиспользуемых событий, они занимают много памяти.
Вместо использования реализации событий, которую 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 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