Инлайнинг (Inlining) — замена вызова метода его телом напрямую в месте вызова. JIT-компилятор делает это автоматически для маленьких методов, которые весят меньше 32 байт.
Зачем это делается
• Убирает overhead вызова метода
• Улучшает локальность кода
• Даёт прирост в 5-7 раз для горячих путей
Пример
Без инлайнинга:
public int Calculate(int a, int b)
{
return Add(a, b) * 2;
}
private int Add(int a, int b) // JIT заинлайнит автоматически
{
return a + b;
}
Что делает JIT:
public int Calculate(int a, int b)
{
return (a + b) * 2; // тело Add() вставлено напрямую
}
Принудительный инлайнинг:
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private int Multiply(int a, int b)
{
return a * b;
}
Не гадайте — профилируйте. Иногда JIT делает лучше без вашей помощи.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view