当我将表达式编译成可执行代码并获得委托时 - 当不再存在对该委托的引用时,代码是否会被垃圾收集?
有没有关于此的文件?因为我在MSDN中找不到任何有用的东西。
当我将表达式编译成可执行代码并获得委托时 - 当不再存在对该委托的引用时,代码是否会被垃圾收集?
有没有关于此的文件?因为我在MSDN中找不到任何有用的东西。
是的,代码可以被垃圾收集。当你在一个表达式T上调用Compile时,代码被编译成一个 DynamicMethod的,那些有资格进行垃圾收集。
实际上它没有在MSDN上显示,但你可以看一下DLR中Expression <T> .Compile的实现,这是.net 4.0发布的:
http://dlr.codeplex.com/SourceControl/changeset/view/54115#990638
虽然编译器的实现在.net 3.5中有所不同,但仍然使用DynamicMethods(来源:我自己,我在Mono中实现了System.Linq.Expressions)。
编译表达式树不可收集的情况是在您使用时 表达<T> CompileToMethod,并从AssemblyBuilder传递一个MethodBuilder,它不是用 RunAndCollect 旗。
是的,代码可以被垃圾收集。当你在一个表达式T上调用Compile时,代码被编译成一个 DynamicMethod的,那些有资格进行垃圾收集。
实际上它没有在MSDN上显示,但你可以看一下DLR中Expression <T> .Compile的实现,这是.net 4.0发布的:
http://dlr.codeplex.com/SourceControl/changeset/view/54115#990638
虽然编译器的实现在.net 3.5中有所不同,但仍然使用DynamicMethods(来源:我自己,我在Mono中实现了System.Linq.Expressions)。
编译表达式树不可收集的情况是在您使用时 表达<T> CompileToMethod,并从AssemblyBuilder传递一个MethodBuilder,它不是用 RunAndCollect 旗。