Обнаружение JIT-оптимизаций или пропущенных оптимизаций - PullRequest
1 голос
/ 10 ноября 2011

.NET CLR JIT будет; в моем понимании; попытаться оптимизировать код с помощью таких шаблонов, как метод Inlining , Loop Unrolling и т. д. ... В случае метода Inlining это не будет выполнено по следующим причинам:

  • Методы, длина которых превышает 32 байта, не будут встроены.
  • Виртуальные функции не встроены.
  • Методы, которые имеют сложное управление потоком, не будут встроены. Комплексное управление потоком - это любое управление потоком, кроме if / then / else; в этом случае переключитесь или пока.
  • Методы, содержащие блоки обработки исключений, не являются встроенными, хотя методы, которые генерируют исключения, по-прежнему являются кандидатами для встраивания.
  • Если какой-либо из формальных аргументов метода является структурой, метод не будет встроенным.
  • Etc ...

У меня вопрос ... Есть ли способ определить, что процесс оптимизации JIT решает пропустить по той или иной причине?

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

1 Ответ

0 голосов
/ 15 декабря 2016

В настоящее время вы можете запустить свое приложение на собственной сборке CoreCLR и собрать всю необходимую статистику.Вы можете проверить clrconfigvalues.h и включить любой флаг, который хотите получить, любую связанную информацию (например, JitDump, используя команду set COMPLUS_JitDump в командной строке)

Это не совсем легко, но этовозможно.

...