Практическое руководство. Объявление пользовательских событий для экономии памяти (Visual Basic)How to: Declare Custom Events To Conserve Memory (Visual Basic)

Существует несколько ситуаций, когда важно, чтобы приложение продолжало использовать память в низком объеме.There are several circumstances when it is important that an application keep its memory usage low. Пользовательские события позволяют приложению использовать память только для обрабатываемых событий.Custom events allow the application to use memory only for the events that it handles.

По умолчанию, когда класс объявляет событие, компилятор выделяет память для поля, в котором хранятся сведения о событии.By default, when a class declares an event, the compiler allocates memory for a field to store the event information. Если класс содержит много неиспользуемых событий, они не занимают память.If a class has many unused events, they needlessly take up memory.

Вместо использования реализации по умолчанию событий, предоставляемых Visual Basic, можно использовать пользовательские события для более тщательного управления использованием памяти.Instead of using the default implementation of events that Visual Basic provides, you can use custom events to manage the memory usage more carefully.

ПримерExample

В этом примере класс использует один экземпляр класса EventHandlerList, хранящийся в поле Events, для хранения сведений об используемых событиях.In this example, the class uses one instance of the EventHandlerList class, stored in the Events field, to store information about the events in use. Класс EventHandlerList является оптимизированным классом списка, предназначенным для хранения делегатов.The EventHandlerList class is an optimized list class designed to hold delegates.

Все события в классе используют поле Events для наблюдения за тем, какие методы обрабатывают каждое событие.All events in the class use the Events field to keep track of what methods are handling each event.

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

См. такжеSee also