Je me casse la tête, mais je continue à chercher de la solution. J'ai couru ces code et analysé avec le profileur de mémoire de .NET. Cela m'a montré qu'une instance d'IntEntity [] n'est pas collectée. Mais je nettoie la liste et la rend nulle. Comment je peux faire cela pour ramasser les ordures? Est-ce que je fais quelque chose de mal ici?C# analyse de fuite de mémoire
Édition: J'ai essayé de définir b = null & en appelant GC.Collect (GC.MaxGeneration); Mais les mêmes résultats.
Edit2: Ajout d'images de NET Memory Profiler & ANTS Profileur de mémoire
S'il vous plaît aidez-moi.
Voici le code am utilise,
public class IntEntity
{
public int Value { get; set; }
}
public abstract class Base
{
protected List<IntEntity> numbers;
public Base()
{
}
public abstract void Populate();
public int Sum()
{
numbers = new List<IntEntity>();
Populate();
int sum = 0;
foreach (IntEntity number in numbers)
{
sum += number.Value;
}
numbers.Clear();
numbers = null;
return sum;
}
}
public class Child : Base
{
public override void Populate()
{
numbers.Add(new IntEntity() { Value = 10 });
numbers.Add(new IntEntity() { Value = 20 });
numbers.Add(new IntEntity() { Value = 30 });
numbers.Add(new IntEntity() { Value = 40 });
}
}
Base b = new Child();
MessageBox.Show(b.Sum().ToString());
b = null;
GC.Collect(GC.MaxGeneration);
Puisque la classe 'Base' est ici abstraite, il doit y avoir un autre code requis pour le diagnostic, oui? –
Il n'y a pas vraiment besoin d'appeler 'numbers.Clear()'. Définir simplement 'numbers = null' entraînera la collecte de la liste et le retrait des références' IntEntity' la prochaine fois que le garbage collector fera son travail. –
Il doit y avoir quelque chose d'autre dans le code qui manque dans votre échantillon. –