Я изучал это с помощью Reflector, и класс Control действительно ускоряет процесс, когда вы добавляете их динамически, независимо от того, добавляете ли вы их. Он делает все - загружает viewstate / controlstate, вызывает события обратной передачи, вызывает обработчики событий и т. Д. Я не знаю, было ли это иначе в ASP.NET 1.x дней, но в 2.0 и выше это так.
Что касается "опасностей" - есть некоторые ошибки, которые неопытный пользователь может отключить, поэтому рекомендуется добавить их в Page_Init или раньше. (Обратите внимание, что событие PreInit применяется только к самой странице, а не к главной странице или элементам управления). С макушки головы (уверен, что может быть еще несколько):
- По умолчанию viewstate загружается позиционно. То есть он игнорирует идентификаторы элементов управления и просто учитывает расположение элементов управления в дереве при загрузке состояния просмотра. Если ваши динамические элементы управления присутствовали при сериализации представления состояния, но не присутствовали при десериализации, неправильный элемент представления может быть назначен неверному элементу управления, что приводит к исключениям. Это может быть изменено некоторыми настройками, хотя мне сейчас лень их искать.
- Поскольку «повышение скорости» происходит при добавлении динамического элемента управления на страницу, порядок некоторых событий может быть неожиданным. Например, если вы добавите элемент управления TextBox на страницу в событии Page_PreRender, тут же произойдет событие Changed TextBox. Если ваш код обработчика событий зависит от события, происходящего с остальными из них до PreRender, то вы облажались.