CSHARPPROGLIB Telegram 6270
👨‍💻 Как ускорить запуск .NET приложения

1️⃣ Сначала измерьте

Включите EventPipe/PerfView/dotnet-trace для старта: какие сборки грузятся, на что тратится время.

Снимите таймлайны: «вход в Main → готовность endpoint'ов / UI».

Измеряйте Release-сборку, без отладчиков и без «горячих» кэшей.

2️⃣ Оптимизации сборки

• ReadyToRun (R2R)
Компилирует IL в машинный код при публикации:
<!-- Directory.Build.props или csproj -->
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode> <!-- для библиотек и DI -->
</PropertyGroup>


• PGO (Profile-Guided Optimization) + R2R
Соберите профиль и примените при crossgen2 (даёт лучший порядок/инлайнинг для «горячего» пути старта).

• NativeAOT
Полностью нативный бинарь, почти мгновенный старт. Подходит для CLI/служб с ограниченным набором фич и для «узких» сервисов или edge-эндпоинтов в вебе.

3️⃣ Минимизация загрузки и работы на старте

Уберите всё, что не нужно при старте: тяжёлые клиенты (БД, кеши, внешние SDK) создавайте лениво, после поднятия хостинга.

Прогружайте конфигурацию минимально: уберите лишние провайдеры, большие JSON-файлы, многократные AddJsonFile.

Логи на старте — только консоль/минимальный уровень, позже можно расширить.

Уберите неиспользуемые пакеты, объедините внутренние пакеты, избегайте древовидных зависимостей ради одной функции.

Встроенный контейнер быстрый, но следите за графом:

• Регайте Singleton/Scoped только когда нужно.
• Избегайте «сервисов-глобов» с большим конструктором на десятки зависимостей.
• Используйте фабрики/Lazy для тяжёлых зависимостей.

4️⃣ ASP.NET Core: быстрый подъём хоста

Минимальный хостинг и только нужные middleware:
var builder = WebApplication.CreateBuilder(args);
// Оставьте только то, что нужно для старта
builder.Services.AddRouting();
var app = builder.Build();
// Критичный middleware – ближе к началу конвейера
app.MapGet("/healthz", () => "OK");
app.Run();


Отключите всё, что делает работу на старте: избыточная авто-дискавери Swagger, отражение в валидации, сканирование сборок.

5️⃣ Инициализация после старта

Разнесите готовность принимать трафик и полную готовность всех подсистем:

• Быстрый /healthz сразу.
• Прогрев кэшей/метаданных — в фоне IHostedService с низким приоритетом.
• В оркестраторе задайте readinessProbe после минимального старта, а «тяжёлый прогрев» делайте уже на фоне.

6️⃣ Тримминг: аккуратно, но даёт эффект

PublishTrimmed=true + TrimMode=partial часто снижает размер и ускоряет загрузку.

Обязательно добавляйте DynamicDependency/UnconditionalSuppressMessage/RD.XML для сохранения типов, которые нужны через рефлексию (DI/JSON/ORM).

💬 А у вас сколько секунд уходит на холодный старт .NET сервиса?

🐸Библиотека шарписта

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153🔥3❤‍🔥1



tgoop.com/csharpproglib/6270
Create:
Last Update:

👨‍💻 Как ускорить запуск .NET приложения

1️⃣ Сначала измерьте

Включите EventPipe/PerfView/dotnet-trace для старта: какие сборки грузятся, на что тратится время.

Снимите таймлайны: «вход в Main → готовность endpoint'ов / UI».

Измеряйте Release-сборку, без отладчиков и без «горячих» кэшей.

2️⃣ Оптимизации сборки

• ReadyToRun (R2R)
Компилирует IL в машинный код при публикации:

<!-- Directory.Build.props или csproj -->
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode> <!-- для библиотек и DI -->
</PropertyGroup>


• PGO (Profile-Guided Optimization) + R2R
Соберите профиль и примените при crossgen2 (даёт лучший порядок/инлайнинг для «горячего» пути старта).

• NativeAOT
Полностью нативный бинарь, почти мгновенный старт. Подходит для CLI/служб с ограниченным набором фич и для «узких» сервисов или edge-эндпоинтов в вебе.

3️⃣ Минимизация загрузки и работы на старте

Уберите всё, что не нужно при старте: тяжёлые клиенты (БД, кеши, внешние SDK) создавайте лениво, после поднятия хостинга.

Прогружайте конфигурацию минимально: уберите лишние провайдеры, большие JSON-файлы, многократные AddJsonFile.

Логи на старте — только консоль/минимальный уровень, позже можно расширить.

Уберите неиспользуемые пакеты, объедините внутренние пакеты, избегайте древовидных зависимостей ради одной функции.

Встроенный контейнер быстрый, но следите за графом:

• Регайте Singleton/Scoped только когда нужно.
• Избегайте «сервисов-глобов» с большим конструктором на десятки зависимостей.
• Используйте фабрики/Lazy для тяжёлых зависимостей.

4️⃣ ASP.NET Core: быстрый подъём хоста

Минимальный хостинг и только нужные middleware:
var builder = WebApplication.CreateBuilder(args);
// Оставьте только то, что нужно для старта
builder.Services.AddRouting();
var app = builder.Build();
// Критичный middleware – ближе к началу конвейера
app.MapGet("/healthz", () => "OK");
app.Run();


Отключите всё, что делает работу на старте: избыточная авто-дискавери Swagger, отражение в валидации, сканирование сборок.

5️⃣ Инициализация после старта

Разнесите готовность принимать трафик и полную готовность всех подсистем:

• Быстрый /healthz сразу.
• Прогрев кэшей/метаданных — в фоне IHostedService с низким приоритетом.
• В оркестраторе задайте readinessProbe после минимального старта, а «тяжёлый прогрев» делайте уже на фоне.

6️⃣ Тримминг: аккуратно, но даёт эффект

PublishTrimmed=true + TrimMode=partial часто снижает размер и ускоряет загрузку.

Обязательно добавляйте DynamicDependency/UnconditionalSuppressMessage/RD.XML для сохранения типов, которые нужны через рефлексию (DI/JSON/ORM).

💬 А у вас сколько секунд уходит на холодный старт .NET сервиса?

🐸Библиотека шарписта

#буст

BY Библиотека шарписта | C#, F#, .NET, ASP.NET


Share with your friend now:
tgoop.com/csharpproglib/6270

View MORE
Open in Telegram


Telegram News

Date: |

Click “Save” ; Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you: Earlier, crypto enthusiasts had created a self-described “meme app” dubbed “gm” app wherein users would greet each other with “gm” or “good morning” messages. However, in September 2021, the gm app was down after a hacker reportedly gained access to the user data. It’s easy to create a Telegram channel via desktop app or mobile app (for Android and iOS): With the administration mulling over limiting access to doxxing groups, a prominent Telegram doxxing group apparently went on a "revenge spree."
from us


Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET
FROM American