Как вы гарантируете, что кеш "метода" CLR JIT был очищен? - PullRequest
1 голос
/ 08 января 2020

Как я могу гарантировать, что JIT-метод CLR очищен? Это просто вопрос запуска нового экземпляра приложения, или вам нужно перезагружать P C?

Насколько я понимаю, CLR JIT зависит от процесса c, и что это должно работать.

  1. Foobar.exe запущено.
  2. DoWork() вызывается для в первый раз
    • JIT-компилятор CLR преобразует промежуточный язык (для DoWork()) в машинный код
    • сгенерированный машинный код кэшируется в памяти для будущих вызовов
  3. DoWork() вызывается снова, и используется существующий машинный код. (то есть JIT обойден)
  4. Завершить Foobar.exe приложение.
    • нет экземпляров Foobar.exe, запущенных
  5. Foobar.exe запускается снова.
  6. DoWork() вызывается для первый раз
    • Завершение предыдущего приложения и запуск нового экземпляра эффективно очистили кэш "метода" JIT.
    • JIT-компилятор CLR преобразует промежуточный язык (для DoWork()) в машинный код
    • сгенерированный машинный код кэшированный в памяти для будущих вызовов
  7. DoWork() вызывается снова, и существующий машинный код используемый. (т. е. JIT игнорируется)

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

Среда

  • Windows IOT Enterprise (LTS C 2019), 64-битный
  • Приложение, на которое в настоящее время нацелено:. Net библиотека 4.7.2, CLR 4.x
    • <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    • в лучшую сторону мои знания, мы не используем. Net core
  • Мы не явно используем NGen

Связанное чтение

1 Ответ

1 голос
/ 08 января 2020

Ваше понимание очень правильно.

Каждый раз, когда процесс запускается, JIT выдает новый машинный код, который используется до завершения процесса.

Однако также возможно создать кэш машинного кода, чтобы избежать повторения джит-эмиссия. Это известно как NGen

...