私は C# で作成された psp エミュレーターの作成者です。
ILGenerator を使用して多くの「DynamicMethod」を生成しています。アセンブリ コードを AST に変換してから、IL コードを生成し、その DynamicMethod をビルドしています。これを別のスレッドで行っているため、プログラムが他のスレッドを実行している間に新しいメソッドを生成できるため、スムーズに実行できます。
私の問題は、ネイティブ コードの生成が遅延しているため、IL が生成されたときではなく、関数が呼び出されたときにマシン コードが生成されることです。そのため、スレッドを実行するプログラムで生成されます。asm->ast->il の手順であるため、ネイティブ コードの生成はかなり遅くなります。
関数を実行する前にマシンコードを生成すると思われる Marshal.Prelink メソッドを試しました。Mono では動作しますが、MS .NET では動作しません。
Marshal.Prelink(MethodInfo);
MS .NET で DynamicMethod をプレリンクする方法はありますか?
関数にブール値のパラメーターを追加すると、設定されている場合はすぐに関数が終了するため、実際にはコードが実行されないと考えました。そのように「事前リンク」することもできますが、それは避けたい厄介な解決策だと思います.
何か案が?