Nol*_*rin 14 .net reflection clr reflection.emit dynamic-method
我在基于反射的C#代码中遇到了一些动态方法,我还没弄清楚它们究竟是什么.特别是似乎有一个DynamicMethod
类允许在运行时生成和指定CLR方法.但那时还有MethodBuilder
班级.他们似乎都做了非常相似的事情.显然,"动态组件"是AssemblyBuilder
类,"动态类型"是TypeBuilder
类.无论如何,它们都驻留在System.Reflection.Emit
命名空间中.
MSDN似乎在这个主题上有很少的高级信息.因此,如果有人可以解释什么是动态方法,这里的所有XYZBuilder
类都在哪里发挥作用,以及它们各自用于什么,那就太棒了.我应该知道的任何其他Reflection.Emit类型和功能也将受到赞赏.
svi*_*ick 15
我认为文档DynamicMethod
解释得很好:
您可以使用
DynamicMethod
该类在运行时生成并执行方法,而无需生成动态程序集和动态类型来包含该方法.当DynamicMethod
回收对象时,回收由实时(JIT)编译器创建的可执行代码.动态方法是生成和执行少量代码的最有效方法.
如果需要动态创建一个或多个方法,请使用DynamicMethod
.如果要创建整个类型,则意味着需要创建动态程序集(AssemblyBuilder
),然后在其中创建模块(ModuleBuilder
),然后创建一个或多个类型(TypeBuilder
).要在这些类型中创建方法,您可以使用MethodBuilder
.
另一个区别是GC:DynamicMethod
s可以随时进行垃圾收集,并逐个收集.也就是说,一旦停止使用它,就可以收集任何方法.另一方面,只有在指定动态装配时(通过使用AssemblyBuilderAccess.RunAndCollect
)才能收集动态装配,并且始终按装配收集它们.例如,如果程序集中有两种类型,并且只使用其中一种类型,则无法收集另一种类型.
归档时间: |
|
查看次数: |
2348 次 |
最近记录: |