C#编译的lambda表达式实例创建和/或垃圾回收?
考虑以下代码示例:C#编译的lambda表达式实例创建和/或垃圾回收?,c#,.net,lambda,C#,.net,Lambda,考虑以下代码示例: using System; using System.Linq.Expressions; public class Class1<T, Y> { public Class1(Expression<Func<T, Y>> mapExpression) { GetValue = mapExpression.Compile(); } public Func<T, Y> GetValu
using System;
using System.Linq.Expressions;
public class Class1<T, Y>
{
public Class1(Expression<Func<T, Y>> mapExpression)
{
GetValue = mapExpression.Compile();
}
public Func<T, Y> GetValue { get; protected set; }
}
public class DataClass
{
public long Data { get; set; }
}
使用系统;
使用System.Linq.Expressions;
公共班级1
{
公共类别1(表达式映射表达式)
{
GetValue=mapExpression.Compile();
}
public Func GetValue{get;protected set;}
}
公共类数据类
{
公共长数据{get;set;}
}
现在假设我在不同的地方创建Class1的新实例,例如
var instance1 = new Class1<DataClass, long>(x => x.Data);
var instance2 = new Class1<DataClass, long>(x => x.Data);
var instance1=newclass1(x=>x.Data);
var instance2=新类别1(x=>x.Data);
当我这样做时,会发生什么:
谢谢你的回答。在.NET4中,您能否更具体地(或提供参考)说明动态创建的代码在什么情况下会被垃圾收集?@Nathan:我必须深入研究文档。IIRC它是从.NET4.Hmm中的新特性“链接”而来的。我想知道lamba.Compile是否会生成DynamicMethod?似乎表明即使在.NET3.5中,动态方法也会被垃圾收集?@Nathan:我相信除了极少数情况外,这种方法不会真正起作用。@Nathan:根据我的经验,ModuleBuilder中也存在“内存泄漏”,阻止了生成字节码的GC。