c# – Expression.Compile和Garbage Collection

前端之家收集整理的这篇文章主要介绍了c# – Expression.Compile和Garbage Collection前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我将表达式编译成可执行代码获取代理时 – 代码是否在不再有对该委托的引用时收集垃圾

有没有关于这方面的文件?因为我没有在MSDN中找到任何有用的东西.

解决方法

是的,代码可以被垃圾回收.当您对T的表达式调用编译时,代码将编译为 DynamicMethod,那些可以进行垃圾回收.

实际上,它没有在MSDN上显示,但是您可以看看DLS中的Expression< T> .Compile的实现,它是.net 4.0发布的:

http://dlr.codeplex.com/SourceControl/changeset/view/54115#990638

虽然编译器的实现在.net 3.5中不同,但DynamicMethods仍然使用(源:我自己,我在Mono中实现了System.Linq.Expressions).

编译表达式树不可收集的情况是当您使用Expression<T>CompileToMethod时,并且您从AssemblyBuilder传递了一个MethodBuilder,该程序库未使用RunAndCollect标志创建.

猜你在找的C#相关文章