繁体   English   中英

C#编译的lambda表达式实例创建和/或垃圾回收?

[英]C# Compiled lambda expressions instance creation and/or garbage collection?

请考虑以下代码示例:

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的新实例,例如

var instance1 = new Class1<DataClass, long>(x => x.Data);
var instance2 = new Class1<DataClass, long>(x => x.Data);

当我这样做时,会发生什么:

  1. 我有两种不同的编译功能吗?
  2. 如果是这样,当Class1的实例被垃圾收集时,这两个编译的函数是否会被垃圾收集?
  3. 如果没有,我怎样才能避免内存泄漏(假设我无法真实地控制Class1实例的创建)?
  1. 是。 如果需要'singleton',请将其设为静态。
  2. 在.NET 4之前,没有,使用.NET 4动态创建的程序集/代码可以在某些条件下进行垃圾收集。
  3. 如果'singleton'模式不起作用,请尝试使用静态缓存机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM