Вимоги: Переглядаючи вихідний код .NET, я помітив, що деякі методи додали функцію [MethodImpl(MethodImplOptions.AggressiveInlining)], але я побачив, що функція MethodImpl може впливати на поведінку компілятора JIT. Деякі тести проводилися на основі інформації з Інтернету.
Конфігурація MethodImplOptions
Код:
Вбудована функція
У комп'ютерних науках вбудована функція (іноді її називають онлайн-функцією або функцією розгортання під час компіляції) — це конструкція мови програмування, яка використовується для того, щоб припустити, що компілятор має вбудовані розширення (іноді їх називають онлайн-розширеннями) до деяких спеціальних функцій; Це означає, що компілятор вставляє та замінює задане тіло функції замість кожного місця (контексту), де вона викликається, економячи додатковий час, витрачений на кожен виклик функції. Однак при виборі використання вбудованих функцій необхідно зважувати простір, зайнятий програмою, і ефективність її виконання, оскільки надто багато складних функцій для вбудованого розширення призведе до значних витрат на ресурси зберігання. Також важливо зазначити, що вбудовані розширення рекурсивних функцій можуть спричиняти нескінченну компіляцію деяких компіляторів.
MethodImplOptions.AggressiveInlining
Функція: Рекомендується максимально інлайнувати JIT-компілятор методу. Пояснення: Інлайн означає заміну виклику функції на саме тіло функції, що зменшує накладні витрати виклику функції. Застосовні сценарії: Підходить для невеликих, часто називаних методів (наприклад, аксесери атрибутів, прості математичні розрахунки тощо). Примітка: Це лише «пропозиція», компілятор JIT може вирішувати, чи робити інлайн чи ні, залежно від конкретної ситуації.
Результати тесту «inline» та «non inline» такі:
Тестовий код виглядає так:
Було встановлено, що завантаження процесора після вбудованих викликів було значно нижчим, ніж у нелінійних викликів, фактичноНе хвилюйтеся надто сильно, сучасні компілятори дуже розумні, навіть без цієї функції компілятор може допомогти вам автоматично оптимізувати。 |