C#编译的lambda表达式实例创建和/或垃圾回收? [英] C# Compiled lambda expressions instance creation and/or garbage collection?
本文介绍了C#编译的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> GetValue { get; protected set; }
}
public class DataClass
{
public long Data { get; set; }
}
现在假设我在不同的地方制作了Class1的新实例,例如
Now suppose that I make in different places new instances of Class1, e.g.
var instance1 = new Class1<DataClass, long>(x => x.Data);
var instance2 = new Class1<DataClass, long>(x => x.Data);
当我这样做时,会发生什么:
When I do this, what happens:
- 我得到两个不同的编译函数吗?
- 如果是这样,那么当Class1的实例被垃圾回收时,两个编译函数是否会被垃圾回收?
- 如果没有,如何避免内存泄漏(假设我无法实际控制Class1实例的创建)?
推荐答案
- 是的.如果需要使用单身",则将其设置为静态.
- 在.NET 4之前,否,对于.NET 4动态创建的程序集/代码可以在某些条件下进行垃圾回收.
- 如果单一"模式不起作用,请尝试使用静态缓存机制.
这篇关于C#编译的lambda表达式实例创建和/或垃圾回收?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文