在运行时构建一次性方法

本文关键字:方法 一次性 构建 运行时 | 更新日期: 2023-09-27 18:09:36

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

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

在运行时构建一次性方法

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

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

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