当我将表达式编译成可执行代码并获取委托(delegate)时 - 如果不再存在对该委托(delegate)的引用,代码是否会被垃圾收集?
有这方面的文档吗?因为我在 MSDN 中没有找到任何有用的东西。
最佳答案
是的,代码可以被垃圾回收。当您对 T 的表达式调用编译时,代码将编译为 DynamicMethod ,并且那些有资格进行垃圾收集。
确实在 MSDN 上没有说明,但您可以查看 DLR 中 Expression
http://dlr.codeplex.com/SourceControl/changeset/view/54115#990638
虽然 .net 3.5 中编译器的实现有所不同,但仍然使用 DynamicMethods(来源:我自己,我在 Mono 中实现了 System.Linq.Expressions)。
编译表达式树不可收集的情况是当您使用 Expression<T>CompileToMethod 时,并且您从不是使用 RunAndCollect 创建的 AssemblyBuilder 传递 MethodBuilder旗帜。
关于c# - Expression<TDelegate>.Compile 和垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340201/