Задать вопрос
adressmoeistranici
@adressmoeistranici
Делатель

Следует ли отключать генерацию событий для графических элементов?

Есть такие контролы как лейблы и панели, которые несут графическое только значение.
У них нет зарегистрированных обработчиков событий.
Выделяется ли память на события к которым нет обработчиков?
Выделяется ли память на ожидание регистраций обработчиков событий вдруг?
  • Вопрос задан
  • 92 просмотра
Подписаться 2 Средний Комментировать
Решения вопроса 1
@cicatrix
было бы большой ошибкой думать
И label, и panel наследуют от класса Windows.Forms.Control, соответственно, являются "дочерними" окнами (window) по отношению к основному.
Чтобы ответить на ваш вопрос, надо понимать, что "под капотом" представляет собой событие.
При регистрации нового окна в системе, выделяется память под программный код (оконная процедура WNDPROC), обрабатывающий приходящие сообщения (Windows Message). Для определённых классов (форма) в него уже сгенерированы обработчики, отвечающие на базовые сообщения (перемещение окна, сворачивание, изменение размера, перерисовка и пр). Оконная процедура есть у всех окон.
Когда вы пишете обработчик события, на самом деле вы передаёте адрес этого обработчика оконной процедуре окна, говоря, что если пришло какое-либо определённое сообщение (Window Message), необходимо выполнить программный код, который находится по такому-то адресу.
Соответственно, если вы не написали обработчик события, то никакой доп. памяти системой не выделяется (не в курсе, правда, оптимизирует ли компилятор "пустые" обрабочики событий).

2. "Вдруг" в компилируемом языке невозможно без чёрной магии и метапрограммирования. Весь ваш программный код компилируется и под него выделяется память при запуске приложения. А вот передать новый параметр оконной процедуре в процессе исполнения можно, подписываясь на то или иное сообщение, или отписываясь от него. Все зависимости от этого, под весь скомпилированный код операционной системой выделяется память.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы