Не специально. Это происходит, когда ASP.NET компилирует разметку ASPX . Разметка ASPX компилируется при первом обращении к странице на лету и сохраняется где-то в C:\WINDOWS\Microsoft.NET\Framework\vX\Temporary ASP.NET Files
.
Исключением является случай, когда вы прекомпилируете свои страницы, используя aspnet_compiler.exe
. Однако, если бы вы его предварительно скомпилировали, вы бы увидели там ошибку, а не когда зашли на сайт.
Эффективно ли это, если он должен делать это каждый раз, когда анализирует разметку страницы?
ASP.NET не анализирует разметку при каждом просмотре страницы и отправляет обратно; он анализируется только один раз, когда он компилируется. Он хранит хэш страницы (обычно называемый hash.web
где-то во временных файлах ASP.NET) и сравнивает хэши. Если хеш отличается (страница изменилась), он перекомпилирует его. Вот пример того, как может выглядеть этот скомпилированный код:
#line 58 "C:\X\UserControls\FilterControl.ascx"
@__ctrl.Click -= new System.EventHandler(this.btnApply_Click);
#line default
#line hidden
#line 58 "C:\X\UserControls\FilterControl.ascx"
@__ctrl.Click += new System.EventHandler(this.btnApply_Click);
Это, конечно, компилируется в исполняемую сборку. По сути, ASPX-компилятор компилирует разметку на стороне сервера в код C #, а затем компилирует ее в сборку.