Вопрос

Что такое инлайнинг?

Для чего его используют?

Можете ли вы встроить что-нибудь на C#?

Это было полезно?

Решение

Что это такое

В терминах C и C ++ вы используете ключевое слово inline, чтобы сказать компилятору вызывать подпрограмму без необходимости переноса параметров в стек. Вместо этого у функции есть машинный код, вставленный в функцию, где она была вызвана. Это может привести к значительному увеличению производительности в определенных сценариях.

Опасности

Скорость дает преимущество при использовании "inlining" значительно уменьшаться по мере увеличения размера встроенной функции. Чрезмерное использование может фактически заставить программу работать медленнее. Встраивание очень маленькой функции доступа обычно уменьшает размер кода, тогда как встраивание очень большой функции может значительно увеличить размер кода.

Встраивание в C #

В C # вставка происходит на уровне JIT, на котором JIT-компилятор принимает решение. В настоящее время в C # нет механизма, который вы могли бы сделать явно. Если вы хотите знать, что делает JIT-компилятор, вы можете вызвать: System.Reflection.MethodBase.GetCurrentMethod (). Name во время выполнения. Если метод встроен, он возвращает имя вызывающей стороны.

В C # вы не можете заставить метод встроиться, но вы можете заставить метод не делать этого. Если вам действительно нужен доступ к определенному стеку вызовов и вам необходимо удалить встраивание, вы можете использовать: MethodImplAttribute с MethodImplOptions.NoInlining . Кроме того, если метод объявлен как виртуальный, он также не будет встроен JIT. Причина этого в том, что конечная цель вызова неизвестна.

Подробнее о встраивании

Другие советы

Для определения и обсуждения встраивания см. увидеть этот вопрос.

В C# вам не нужно указывать компилятору или среде выполнения на встраивание, поскольку среда выполнения сделает это автоматически.

P.S.Этот ответ верен и для Java.

Встраивание - это когда вместо вызова конкретной функции содержимое функции выполняется непосредственно на сайте вызова. Основная причина для этого заключается в том, что он устраняет накладные расходы при вызове функции, выполняя содержимое функции на месте вызова.

Используется как метод оптимизации. В случае C # на самом деле все зависит от движка CLR JIT. Во время выполнения при компиляции метода механизм JIT будет использовать эвристику, чтобы определить, подходит ли встроенная функция и будет ли она эффективной оптимизацией. Если это так, выполняется inline.

У Вэнса есть отличная статья о том, что JIT учитывает при встраивании: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to- рядный, что-это-The-question.aspx

В C # нет способа принудительно встроить строку. Язык не поддерживает эту конструкцию. Главным образом потому, что люди очень плохо судят о том, что следует оптимизировать. JITer - намного лучший судья.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top