From 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字节码-类似编译器),并将新委托保存为静态属性。
如何显式收集/回收动态方法?
不能显式地处置DynamicMethod,因为它没有实现IDisposable接口。但是,您可以告诉GarbageCollector何时需要收集:System.GC.Collect();
根据MSDN