15

リフレクション ベースの C# コードで動的メソッドに少し遭遇しましたが、それらが何であるかはまだ正確に把握していません。具体的DynamicMethodには、実行時に CLR メソッドの生成と指定を可能にするクラスがあるようです。MethodBuilderしかし、それからクラスもあります。どちらも非常に似たようなことをしているようです。どうやら「動的アセンブリ」はAssemblyBuilderクラスであり、「動的型」はTypeBuilderクラスです。いずれにせよ、それらはすべてSystem.Reflection.Emit名前空間に存在します。

MSDN には、この件に関する高レベルの貴重な情報がほとんどないようです。したがって、誰かが動的メソッドとは何か、ここですべてのXYZBuilderクラスが正確にどこで機能するのか、そしてそれぞれが何のために使用されるのかを説明できれば、それは素晴らしいことです. 私が知っておくべきその他の Reflection.Emit の型と機能も高く評価されます。

4

1 に答える 1

16

のドキュメントがこれをDynamicMethodよく説明していると思います:

このDynamicMethodクラスを使用すると、実行時にメソッドを生成して実行できます。メソッドを含む動的アセンブリと動的型を生成する必要はありません。Just-In-Time (JIT) コンパイラによって作成された実行可能コードは、DynamicMethodオブジェクトが再利用されるときに再利用されます。動的メソッドは、少量のコードを生成して実行するための最も効率的な方法です。

1 つ以上のメソッドを動的に作成する必要がある場合は、 を使用しますDynamicMethod。型全体を作成する場合は、動的アセンブリを作成し ( AssemblyBuilder)、その中にモジュールを作成し ( ModuleBuilder)、1 つ以上の型を作成する( ) 必要があることを意味しますTypeBuilder。これらの型内にメソッドを作成するには、 を使用しますMethodBuilder

もう 1 つの違いは GC ですDynamicMethod。つまり、使用を中止するとすぐに、どのメソッドも収集できます。一方、動的アセンブリは、( を使用してAssemblyBuilderAccess.RunAndCollect) 指定した場合にのみ収集でき、常にアセンブリごとに収集されます。たとえば、アセンブリに 2 つのタイプがあり、そのうちの 1 つだけを使用する場合、もう 1 つを収集することはできません。

于 2012-03-18T11:01:17.450 に答える