Время предварительной компиляции и запуска на ASP.Net

Я занимаюсь разработкой (относительно небольшого) веб-сайта в ASP.Net 2.0. Я также использую nAnt, чтобы выполнить некоторые настройки моего проекта перед доставкой исполняемых файлов. В своем текущем состоянии сайт "предварительно скомпилирован" с использованием

aspnet_compiler.exe -nologo -v ${Appname} -u ${target}

Я заметил, что после перезапуска пула IIS (после выключения или перезапуска в режиме ожидания) приложению требуется до 20 секунд, прежде чем оно возвращается в оперативный режим (и достигается Application_start).

У меня нет той же проблемы, когда я отлаживаю непосредственно в Visual Studio (для запуска требуется 2 секунды), поэтому мне интересно, действительно ли aspnet_compiler - хорошая идея.

Я не мог найти много на MSDN. Как вы собираете свои сайты для производства?

6 ответов

Решение

Удостоверься что:

  1. Вы используете проект веб-приложения, а не проект веб-сайта, это приведет к предварительно скомпилированному двоичному файлу для вашего кода
  2. Вы отключили генерацию отладочного кода в файле web.config - думаю, если это отличается от того, когда вы использовали aspnet_compiler, код может быть перекомпилирован

Если вы пробовали это, вы могли бы попробовать запустить ngen поверх вашей сборки, тем самым сэкономив время JIT?

Для окончательного ответа, не позволяйте вашему приложению закрываться.

Первый способ - убедиться, что он невероятно популярен, чтобы всегда был кто-то, кто его использует.

В качестве альтернативы, получение крошечной страницы поддержки активности из другого места в качестве запланированного действия может использоваться для поддержания вашего сайта в "горячем" состоянии.

Если ваш сайт скомпилирован как обновляемый, вы увидите кучу файлов.ASPX в вашем виртуальном каталоге. Они должны быть скомпилированы при запуске. Вот так вы можете войти и изменить сам веб-интерфейс. Это по умолчанию для веб-сайтов и веб-приложений.

Убедитесь, что это установлено в web.config <compilation debug=false>, В моем случае у меня также есть пакетный файл, который выдает запросы Get для всех основных страниц перед передачей пользователям (симуляция загрузки страницы).

Главное, чтобы пул приложений IIS никогда не выключался. Это где код на самом деле размещен. Установите для параметра "Время простоя" (в разделе "Дополнительные настройки") действительно высокое значение, например 1440 минут (24 часа), чтобы оно не отключалось, пока кто-то посещает ваш сайт один раз в день.

Вы по-прежнему будете иметь время JIT при каждом развертывании нового кода или превышении этого периода простоя без какого-либо трафика.

Настройка IIS 7.x Время простоя

@Simon:

  • Проект представляет собой веб-приложение. Веб-сайты затем запускаются медленнее (я понятия не имел, что это имеет место, помимо другой организации кода)?
  • Я проверил, и хотя я редактирую web.config после вызова aspnet_compiler, я не касаюсь значения отладки (однако я проверю, что веб-сайт не запускается быстрее, если я не касаюсь web.config, просто чтобы сделать конечно)

(И я обязательно взгляну на ngen, я не знал об этом инструменте.)

Другие вопросы по тегам