gpt4 book ai didi

c# - Expression.Compile 和垃圾收集

转载 作者:可可西里 更新时间:2023-11-01 08:43:52 29 4
gpt4 key购买 nike

当我将表达式编译成可执行代码并获取委托(delegate)时 - 如果不再存在对该委托(delegate)的引用,代码是否会被垃圾收集?

有这方面的文档吗?因为我在 MSDN 中没有找到任何有用的东西。

最佳答案

是的,代码可以被垃圾回收。当您对 T 的表达式调用编译时,代码将编译为 DynamicMethod ,并且那些有资格进行垃圾收集。

确实在 MSDN 上没有说明,但您可以查看 DLR 中 Expression .Compile 的实现,这是 .net 4.0 附带的内容:

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com