在运行时构建一次性方法



我的程序在任何时候创建新方法(使用MethodBuilder与字节IL数组),它执行它们一次并丢弃对它们的引用。我发现它们实际上不受GC的影响。是否有一种方法可以让GC收集或处理它们?

我发现问题是,要创建新的方法,需要加载它的程序集,不能卸载后。我需要在主应用程序域上运行这些方法。(创建对象或修改对象)是否有MethodBuilder的替代方案,只是执行那些字节IL ?

如果您只需要发出一个可以稍后被垃圾收集的方法,则使用DynamicMethod。来自文档:

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

如果需要动态构建类型,则需要为其定义可收集的动态程序集。要做到这一点,使用AssemblyBuilder.DefineDynamicAssemblyAssemblyBuilderAccess.RunAndCollect选项。这里详细说明了在可收集程序集中可以做什么有一些限制。

相关内容

最新更新