c# - 在运行时构建一次性方法

标签 c# reflection.emit

我的程序随时创建新方法(使用 MethodBuilder 和 byte\IL 数组),它执行一次并丢弃对它们的引用。我发现它们实际上并没有受到 GC 的影响。有没有办法让 GC 收集或处理它们?

我发现问题是要创建新方法,需要加载它的程序集,之后无法卸载。我需要在主应用程序域上运行这些方法。 (它创建对象或修改一些对象) 有没有 MethodBuilder 的替代方案,并且无论如何都只执行那些 byte\IL?

最佳答案

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

Defines and represents a dynamic method that can be compiled, executed, and discarded. Discarded methods are available for garbage collection.

如果您需要动态构建一个类型,那么您需要为其定义一个可以收集的动态程序集。为此,请使用带有 AssemblyBuilderAccess.RunAndCollect 选项的 AssemblyBuilder.DefineDynamicAssembly。在详细的收藏集会中可以做什么有一些限制 here .

关于c# - 在运行时构建一次性方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345527/

相关文章:

c# - 鼠标事件监听器 - 在整个屏幕上?

c# - 如何在Windows Phone 8中播放SMS警报声音

c# - Entity Framework 函数是否自动转义输入以防止注入(inject)?

c# - 带有 “Yes” 的消息框,C# 中的 “No” 选择?

c# - AspNetCore默认授权用户未经过身份验证

c# - 在 C# 中获取属性值(反射)的最快方法

c# - 为二维数组生成 IL

.net - 为什么在调试/反汇编期间我不能进入调用指令?

c# - 使用 Reflection.Emit 从派生类调用 BaseClass 中的私有(private)方法

c# - 使用泛型 T 的 DefineMethod