Как избежать передачи медленного времени Application_Start конечным пользователям в ASP.NET

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

Проблема, которую я пытаюсь решить, заключается в том, как мне избежать передачи этого времени запуска конечному пользователю?

Предположения

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

Моя идея решить его

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

Мое текущее решение - обработать событие Application_End, а затем сразу же попасть в приложение, чтобы оно запустилось снова, поэтому, надеюсь, не будет влиять на пользователей.

Есть ли лучший способ решить эту проблему?

Ответ 1

К сожалению, более длительный тайм-аут сеанса не будет препятствовать повторному использованию пула приложений IIS при использовании состояния сеанса InProcess.

Рассматривали ли вы ленивую загрузку (некоторые из) ваших зависимостей? У SimpleInjector есть документация о том, как это сделать, которая должна быть адаптирована к большинству других IoC:

Простой инжектор\Документация\Как\Регистрация Factory Делегаты\Работа с ленивыми фабриками

Ответ 2

В моем понимании, чтобы предотвратить распространение времени запуска для пользователей, вам следует избегать утилизации пула приложений, для которого вы можете использовать Тайм-аут пула приложений IIS настройки, они могут быть настроены через web.config, а не только через консоль IIS. Кроме того, вы можете прочитать больше здесь, на этом SO qurestion. Для этого вам может не понадобиться приложение Application_End.

Обновление: Я нашел еще одну интересную вещь, которая может помочь вам в этом, проверьте этот IIS Application Initialization Extension, который можно использовать для предварительной загрузки зависимостей, как только рабочий процесс начинается. Это может помочь вам улучшить качество обслуживания клиентов. Проверьте это.