在运行时构建一次性方法

时间:2014-06-21 20:18:22

标签: c# reflection.emit

我的程序随时创建新方法(使用带有byte \ IL数组的MethodBuilder)它执行一次并丢弃对它们的引用。我发现他们实际上并没有受到GC的影响。有没有办法让GC收集或处理它们?

我发现问题是要创建新方法,需要加载它后面无法卸载的程序集。我需要在主appdomain上运行这些方法。 (它创建对象或修改一些) 是否有MethodBuilder的替代方法,并且只执行那些字节\ IL?

1 个答案:

答案 0 :(得分:5)

如果您只需要发出一个可以在以后进行垃圾回收的方法,请使用DynamicMethod。来自文档:

  

定义并表示可以编译,执行和丢弃的动态方法。废弃的方法可用于垃圾收集。

如果需要动态构建类型,则需要为其定义可以收集的动态程序集。为此,请使用AssemblyBuilder.DefineDynamicAssembly选项AssemblyBuilderAccess.RunAndCollect。对于您在详细here收集的集合中可以执行的操作存在一些限制。