我是用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