Минимизируйте время запуска asp.net - PullRequest
10 голосов
/ 05 апреля 2011

В IIS запущено несколько веб-служб (WCF). Когда сервисы нагреваются (загружаются), для выполнения типичных запросов требуется около 0,5 секунды. Однако, когда приложение не прогревается (холодный запуск), первое нажатие занимает около 20 секунд, прежде чем служба запускается и работает. То же самое происходит, когда происходит перезапуск пула приложений.

Я хочу сократить время холодного запуска этого веб-сервиса. Некоторые действия, которые я уже выполнил:

  • Настроил пул приложений так, чтобы он не перезагружался через 20 минут, простоя (чтобы приложение оставалось теплым). Это минимизирует вероятность холодных запусков, но не ускоряет холодные запуски . Количество повторов в пуле приложений теперь ограничено, но все равно происходит.

  • Изменен machine.config,

как это:

<runtime>
    <!-- see http://msdn.microsoft.com/en-us/library/bb629393(v=vs.90).aspx -->
    <generatePublisherEvidence enabled="false"/>
</runtime>

Это уменьшает время запуска с 20 секунд до 10 секунд.

  • Я пытался использовать NGEN для предварительной компиляции сборок,

вот так

for %d in (*.dll) do ngen install %d

Это не уменьшает время запуска (только усложняет развертывание).

Я бы хотел еще больше сократить время холодного запуска. Какие варианты я должен сделать это?

(на заметку: как лучше узнать, на что тратится время при запуске? Как мне следить за происходящим?)

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Обновление

Я провел дополнительное тестирование с procmon.Кажется, что нет единственной причины времени запуска, это множество маленьких временных интервалов (запуск процесса, загрузка, сетевое время выполнения, чтение конфигурации, загрузка сборок и т. Д.), Которые складываются в общее время.

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

Мне повезло со стратегией, найденной в этой статье .Он поддерживает работу приложения, поэтому после его запуска у вас просто не будет холодных запусков (если только IIS или машина не будут перезапущены намеренно или в результате существенной ошибки).Приложение поддерживает себя независимо от какой-либо активности.

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

...