У меня есть небольшое приложение Service Fabric, которое я создаю, и с тех пор, как я преобразовал его в Service Fabric, меня раздражало медленное время запуска, и это происходит не только после выпуска, но и после 10-15 минут бездействия.
Я добавил проект, единственной целью которого является обращение к каждой службе и выполнение небольшого запроса БД каждые 10 секунд, думая, что это будет поддерживать работу приложения и ef. Это помогло мне получить тайм-ауты, и теперь первые запросы находятся в диапазоне 5-15 секунд. После некоторого прогрева запросы обычно находятся в диапазоне 300 мс, поэтому это довольно простые запросы, и между службами не так много связи (всего 4 службы).
После долгих поисков я нашел профилировщик, который, кажется, работает так, как большинству не нравится тот, что в Visual Studio. К сожалению, на самом деле он мало что сказал, за исключением того, что он много ждет потоков и что этого, похоже, нет в моем коде. Все мои внешние запросы используют await async. Кроме того, при выполнении запроса казалось, что информации не хватает...
Сначала я подумал, что медлительность может быть вызвана тем, что ef генерирует поисковый запрос, поэтому я перенес эту часть, чтобы вместо этого использовать dapper (полный запрос все еще использует некоторое количество ef), но на самом деле это ничего не изменило.
В приложении есть все новейшие сервисные структуры, ядро dotnet, ядро ef, пакеты аналитики приложений. Все сервисы, кроме одного, проверяющего токены, не имеют состояния. И, конечно же, построен в режиме выпуска.
В этот момент я немного потерялся, так как не могу найти причину, по которой это так медленно. Раньше это обычно происходило из-за того, что IIS закрывал приложение или перезапускал его, но теперь, когда его нет, что это может быть?