. NET Core: Что именно делает MethodImplOptions.AggressiveOptimization? - PullRequest
2 голосов
/ 04 мая 2020

Что именно делает MethodImplOptions.AggressiveOptimization? Документация Microsoft мало что мне говорит. В каких случаях это может быть полезно?

1 Ответ

2 голосов
/ 05 мая 2020

Я бы поискал более подробную информацию (если это то, что вы ищете) не в документации, а на . net core github или в примечаниях к выпуску .

Начнем с последнего. Для. net core 3.0 мы можем найти следующую запись:

Полная оптимизация JIT производит более качественный (или более оптимизированный) код медленнее. Для методов, в которых не будет использоваться Quick JIT (например, если к методу приписан MethodImplOptions.AggressiveOptimization), используется полностью оптимизирующий JIT. помечен таким атрибутом, он должен быть JIT с полностью оптимизированным JIT, который может дать лучший, более оптимизированный код, но потребует больше времени для компиляции.

Теперь давайте сосредоточимся на github и посмотрим, что мы можем там найти .

Обсуждение этого проводится в этом тикете , и это дает немного больше деталей в топи c.

Флаг может быть используется в MethodImplAttribute, чтобы указать, что метод содержит горячий код:

  • Для многоуровневого размещения это может привести к немедленному использованию JIT уровня 1 для метода [...]
  • Это может позволить JIT тратить больше времени JIT для генерации лучшего кода, например, более агрессивно встраиваться в функцию

Отсюда мы можем получить ответ на в каких случаях он может быть использован, а также что он делает под ним.

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

Также есть интересное обсуждение других вариантов использования этого флага, которое вы можете прочитать.

Но истина в последней инстанции (я надеюсь) и коммиты связаны с этим обсуждением, поэтому мы можем их рассмотреть. И из этих коммитов и сообщений о коммитах мы можем понять, что именно это и происходит с многоуровневой компиляцией и JIT (по крайней мере, это то, что я вижу).

...