我的程序随时创建新方法(使用带有byte \ IL数组的MethodBuilder
)它执行一次并丢弃对它们的引用。我发现他们实际上并没有受到GC的影响。有没有办法让GC收集或处理它们?
我发现问题是要创建新方法,需要加载它后面无法卸载的程序集。我需要在主appdomain上运行这些方法。 (它创建对象或修改一些)
是否有MethodBuilder
的替代方法,并且只执行那些字节\ IL?
答案 0 :(得分:5)
如果您只需要发出一个可以在以后进行垃圾回收的方法,请使用DynamicMethod
。来自文档:
定义并表示可以编译,执行和丢弃的动态方法。废弃的方法可用于垃圾收集。
如果需要动态构建类型,则需要为其定义可以收集的动态程序集。为此,请使用AssemblyBuilder.DefineDynamicAssembly
选项AssemblyBuilderAccess.RunAndCollect
。对于您在详细here收集的集合中可以执行的操作存在一些限制。