Требования: При просмотре исходного кода .NET я обнаружил, что некоторые методы добавили функцию [MethodImpl(MethodImplOptions.AggressiveInlining)], но я заметил, что функция MethodImpl может влиять на поведение компилятора JIT. Некоторые тесты проводились на основе информации из Интернета.
Configuration MethodImplOptions
Код:
Линейная функция
В информатике встроенная функция (иногда называемая онлайн-функцией или функцией разложения во время компиляции) — это конструкция языка программирования, используемая для того, чтобы компилятор предлагал встроенные расширения (иногда называемые онлайн-расширениями) для некоторых специальных функций; Это означает, что компилятор вставляет и заменяет заданное тело функции вместо каждого места (контекста), куда вызывается функция, экономя дополнительное время, затраченное на каждый вызов функции. Однако при выборе использования встроенных функций необходимо взвесить пространство, занимаемое программой, и эффективность её выполнения, поскольку слишком много сложных функций для встроенного расширения приведёт к большим расходам на ресурсы хранения. Также важно отметить, что встроенные расширения рекурсивных функций могут приводить к бесконечной компиляции некоторых компиляторов.
MethodImplOptions.AggressiveInlining
Функция: Рекомендуется максимально инлайнировать JIT-компилятор метода. Объяснение: Инлайн означает замену вызова функции на сам функциональный корпус, что снижает накладные расходы вызова функции. Применимые сценарии: Подходит для небольших, часто называемых методов (например, аксесоры атрибутов, простые математические вычисления и т.д.). Примечание: Это всего лишь «предложение», компилятор JIT может решать, стоит ли действительно вставлять его в строй или нет, в зависимости от конкретной ситуации.
Результаты теста «inline» и «non inline» следующие:
Тестовый код следующий:
Было установлено, что загрузка процессора после вложенных вызовов была значительно ниже, чем при не-линейных вызовах, фактическиНе переживайте слишком сильно, современные компиляторы очень умные, даже без добавления этой функции компилятор может помочь вам автоматически оптимизировать。 |