Как избежать передачи медленного времени 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, который можно использовать для предварительной загрузки зависимостей, как только рабочий процесс начинается. Это может помочь вам улучшить качество обслуживания клиентов. Проверьте это.