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