Очень долгая загрузка первоначальной страницы ASP MVC

Рейтинг: 2Ответов: 1Опубликовано: 20.04.2015

Здравствуйте!

Есть проект:

  • Платформа: ASP MVC (.NET 4.5) + DevExpress компоненты.
  • Проблема: Запуск index страницы очень долгий. Как только страница загрузилась проект начинает работать в нормальном режиме, никаких подтормаживаний нет.

Как соптимизировать первоначальный запуск проекта?

Консоль выдает:

"iisexpress.exe" (CLR v4.0.30319: DefaultDomain). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
"iisexpress.exe" (CLR v4.0.30319: DefaultDomain). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_32\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
"iisexpress.exe" (CLR v4.0.30319: DefaultDomain). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
"iisexpress.exe" (CLR v4.0.30319: DefaultDomain). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
"iisexpress.exe" (CLR v4.0.30319: DefaultDomain). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.ApplicationServices\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.ApplicationServices.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
....

Ответы

▲ 7Принят

Сам по себе старт ASP.NET приложения - довольно медленный процесс, особенно если у вас все еще используются aspx/ascx страницы/views или ресурсы в папках App_GlobalResources и App_LocalResources. Это вызвано тем, что ASP.NET при старте

  • создает shadow copy почти всего из bin в своей папке Temporary ASP.NET Files.
  • генерирует из aspx/ascx/cshtml и файлов ресурсов код и компилирует его.
  • в процессе холодного запуска еще и компилирует IL для всей пачки полученных файлов в инструкции для конкретной системы.

Поэтому время старта приложения очень сильно проседает.

Для ускорения запуска на машине разработчика можно использовать:

  • запуск не под отладчиком - он оооооочень замедляет старт. Запускайте по Ctrl+F5, и только когда вам нужен отладчик - цепляйтесь к процессу IIS/IIS Express через Debug / Attach To Process, Ctrl+Alt+P.
  • флаг <compilation optimizeCompilations="true"> в web.config - тут подробно расписано что именно он делает.
  • побольше памяти и SSD в качестве системного диска.

Для ускорения запуска на живом сервере можно использовать:

  • прогон утилитой aspnet_compile.
  • App Suspend, если у вас проблемы со стартом приложения после остановки из-за неактивности (aka утренние тормоза).
  • установку сборок DevExpress и всего остального редко меняющегося в GAC - тогда ASP.NET не будет копировать их Temp, что ускорит старт.
  • прогон сборок DevExpress и всего остального редко меняющегося через Native Image Generator.

На практике обычно хватает aspnet_compile. Время работы утилиты практически совпадает с задержкой при старте приложения, т.е. если она у вас работает 5 минут - то приложение стартует на 5 минут быстрее.