Betrachten Sie das folgende Codebeispiel:
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; }
}
Nehmen wir nun an, dass ich an verschiedenen Stellen neue Instanzen von Klasse1 erzeuge, z. B.
var instance1 = new Class1<DataClass, long>(x => x.Data);
var instance2 = new Class1<DataClass, long>(x => x.Data);
Was passiert, wenn ich das tue?
- Bekomme ich zwei verschiedene kompilierte Funktionen?
- Wenn ja, werden die beiden kompilierten Funktionen garbage collected, wenn die Instanzen von Class1 garbage collected werden?
- Wenn nicht, wie kann ich ein Speicherleck vermeiden (unter der Annahme, dass ich die Erstellung von Class1-Instanzen realistischerweise nicht kontrollieren kann)?