Минимум времени запуска для asp.net

У меня есть несколько веб-служб (WCF), работающих в IIS. Когда услуги теплые (загруженные), типичные запросы занимают около 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

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

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

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

Ответ 1

Update

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

Ответ 2

Какая версия IIS? Можете ли вы установить AppFabric?

Ответ 3

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

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