Время предварительной компиляции и запуска в 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. Как вы компилируете свои веб-сайты для производства?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
2 433
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

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

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

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

@Simon:

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

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

Я думаю, что проблема веб-приложений и сайтов на самом деле может быть связана с обновляемым битом, как упоминает Уилл - мои приложения не помечены как обновляемые. Я думаю, что вы, вероятно, правы насчет организации, мне нужно немного больше, чтобы подтвердить.

Simon Steele 11.09.2008 21:23

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

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

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

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

Мне интересно, что два человека проголосовали против моего ответа без комментариев, несмотря на то, что это реалистичный подход, используемый некоторыми очень большими системами. Обратите внимание, что DotNetNuke включает keepalive.aspx именно для этой цели.

Steve Morgan 13.10.2008 00:18

Не я, но я бы предположил, что отрицательные голоса вызваны тем, что это не сокращает время запуска. Кроме того, в IIS7.5 / .Net 4 в этом нет необходимости, поскольку ASP .Net 4.0 поставляется с функцией автоматического запуска, которая выполняет то же самое.

Brian 07.04.2011 01:36

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

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

Настройка тайм-аута простоя IIS 7.x

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