отказался от создания дескриптора окна - PullRequest
0 голосов
/ 29 ноября 2011

Эта статья предполагает, что .NET откладывает создание дескриптора Windows, но я не смог найти никаких ссылок на MSDN и т. Д. Для поддержки этого.Кто-нибудь может указать мне больше информации об этом?

В попытке повысить производительность .NET максимально откладывает создание реальных окон Win32

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Да, собственное окно не создается, пока оно не станет абсолютно необходимым.Что обычно происходит, когда вы устанавливаете свойство Visible формы в true или вызываете его метод Show (то же самое).Или если вы используете свойство в конструкторе, которое требует, чтобы свойство Handle было допустимым.Что редко и может быть немного хлопотно.Все классы Winforms хранят назначенные вами значения свойств (или назначенный дизайнером код) и фактически не применяют их до тех пор, пока не будет создано собственное окно.

Оптимизация обычно незначительна, но может иметь большое значениена некоторых элементах управления.Хорошими примерами являются TreeView и ListView, если вы даете им много элементов в конструкторе.Отложенная инициализация получит базовый собственный элемент управления Windows с сообщением массовой инициализации.Вместо сообщения для каждого отдельного элемента, который вы добавляете.Большая разница.Также обратите внимание, что общепринятая практика добавления элементов в обработчик событий Load формы игнорирует эту оптимизацию.Всегда поддерживай конструктора.

1 голос
/ 29 ноября 2011

В документации для Control.Handle :

Значением свойства Handle является Windows HWND.Если дескриптор еще не был создан, ссылка на это свойство заставит его создать.

Это явно не говорит о том, что создание дескриптора отложено, но очень сильно подразумевается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...