Время предварительной компиляции и запуска на ASP.Net - PullRequest
5 голосов
/ 11 сентября 2008

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

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

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

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

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

Ответы [ 6 ]

4 голосов
/ 11 сентября 2008

Для максимальной ответной реакции не разрешайте закрывать приложение.

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

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

4 голосов
/ 11 сентября 2008

Убедитесь, что:

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

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

2 голосов
/ 11 сентября 2008

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

1 голос
/ 07 апреля 2011

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

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

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

1 голос
/ 11 сентября 2008

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

0 голосов
/ 11 сентября 2008

@ Саймон:

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

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

...