来自MSDN:
您可以使用 DynamicMethod 类在运行时生成和执行方法,而无需生成动态程序集和动态类型来包含该方法。由即时 (JIT) 编译器创建的可执行代码在回收 DynamicMethod 对象时被回收。动态方法是生成和执行少量代码的最有效方式。
我有以下代码:
Type returnType = typeof(string);
Type[] argTypes = { typeof(string), typeof(IEnumerable<string>) };
var dynamicMethod = new DynamicMethod("DynamicMethod1", returnType, argTypes);
ILGenerator ilGen = dynamicMethod.GetILGenerator();
const string Returned = "returned";
ilGen.Emit(OpCodes.Ldstr, Returned);
ilGen.Emit(OpCodes.Ret);
var handler =
(Func<string, IEnumerable<string>, string>)
dynamicMethod.CreateDelegate(typeof(Func<string, IEnumerable<string>, string>));
即,我用一些简单的主体创建动态方法,然后我想将委托保存到静态属性。在多次调用此委托后,我想回收/收集方法并用另一个主体重新创建它(我编写了解释语言,将我的自定义语法解释为 MSIL 字节码 - 类似于编译器)并将新委托保存到静态属性。
我如何明确收集/回收动态方法?