1

来自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 字节码 - 类似于编译器)并将新委托保存到静态属性。

我如何明确收集/回收动态方法?

4

1 回答 1

-1

您不能显式处理 DynamicMethod,因为它没有实现 IDisposable 接口。但是,您可以告诉 GarbageCollector 何时需要收集:System.GC.Collect();

根据MSDN,这“强制所有代的立即垃圾收集”

于 2013-04-18T19:18:39.667 回答