Сохранение контроллеров в проекте ASP.NET Core Web API

Я заметил, что через какое-то время службы ASP.NET Core Web API, похоже, проходят тот же процесс инициализации, который вы получаете, когда вы запускаете их свежими, т.е. Первоначальный запрос выполняется медленно, а последующие запросы выполняются быстро.

Существует ли общая методика, позволяющая держать контроллеры в тепле, поэтому этого не происходит? Для справки Я не использую IIS (насколько мне известно), эти службы запускаются в Docker, используя официальные изображения докеров Microsoft.NET Core (не Alpine).

Я должен также указать, что контроллеры в этих сервисах предварительно нагреваются при запуске через конечную точку /ready, вызываемую Кубернетом в качестве проверки готовности. Проблема в том, что это, похоже, не особенно долгое время.

Ответ 1

Это определенно не похоже на проблему с контроллером. Контроллеры обычно являются новым экземпляром для каждого запроса. Когда вы отметили "slow → 8 seconds, fast → 300ms" в комментарии, это определенно не связано с Kestrel или контроллером.

Ваша проблема может быть любым количеством вещей, но здесь пара догадок:

  • Если вы запускаете свое приложение в Windows (например, службу приложений Azure), оно работает под IIS. Возможно, вам потребуется проверить настройки IIS и хостинга. Некоторые хосты приостанавливают ваш веб-сервис, если это "дешевый" уровень.

  • "slow → 8 seconds" это, честно говоря, звучит так, будто у вас есть внешний вызов, который медленный. Возможно, Db, внешний API или что-то повторное аутентификация.

Ответ 2

Если это ваш опыт в вашей коробке разработки/на персональном компьютере, и когда вы испытываете это во время каждой отладки или запуска своего приложения, это может произойти. Но в реальном времени это, безусловно, не будет иметь место (за исключением самого первого запуска или после перезапуска пула приложений или перезапуска экземпляра службы). Даже тогда на сервере эта разница должна быть очень минимальной. С ядром .net должно быть даже минимальное время задержки.