Можно ли форсировать компиляцию DynamicMethod без взлома? - PullRequest
2 голосов
/ 27 января 2020

Я работаю над решением для сериализации Json.

Я обнаружил, что сериализация, основанная на излучении, была намного быстрее, чем прямые операции над API Reflection после того, как выпущенный код уже был запущен один раз (каждый раз с различными данными).

Очевидно, что проблема в JIT. Это можно проверить, если вы проверите реализацию Runtime.CompilerServices.RuntimeHelpers._CompileMethod в DynamicMethod.CreateDelegate, которая является методом QCall. Он генерирует только Prestub для MethodDescriptor DynamicMethod.

Так что мне интересно, есть ли способ форсировать компиляцию DynamicMethod. Функция PreJIT, предоставляемая Runtime.CompilerServices.RuntimeHelpers.PrepareMethod, просто не работает, потому что у меня нет прямого доступа к RuntimeMethodHandle DynamicMethod. Так есть ли другой (легальный) способ достижения этой цели?

Заранее спасибо.

...