我是用C#制作的psp模拟器的作者。DynamicMethod预链接
我使用ILGenerator生成大量的“DynamicMethod”。我将汇编代码转换为AST,然后生成IL代码并构建DynamicMethod。我在另一个线程中这样做,所以我可以在程序执行其他程序时生成新的方法,以便它可以顺利运行。
我的问题是本机代码的生成是懒惰的,因此机器码是在函数调用时生成的,而不是在生成IL时生成的。因此,它在程序执行线程中生成,本地代码生成速度慢,因为它是asm-> ast-> il步骤。
我试过了Marshal.Prelink方法,它被用来在执行函数之前生成机器码。它在Mono上工作,但它不适用于MS .NET。
Marshal.Prelink(MethodInfo);
是否有一种方法可以预先链接MS .NET上的DynamicMethod?
我想加入一个布尔参数给函数,如果设置,立即退出函数,所以没有代码实际执行。我可以以这种方式“预先链接”,但我认为这是我想避免的一个讨厌的解决方案。
有什么想法?
我真的不明白为什么会创建一个委托强制JIT。第二种方法应该与CER(受限执行区域)一起使用,但不确定这是否正确。 – svick