Esneyder Esneyder - 16 days ago 11
C# Question

How free memory used by a large list in C#?

I have a list called

Population
, is a great list of very many positions and at some point I stop using it. How I can free the resources?
Then this is part of the code:

private List <BasePopulation> Population=new List <BasePopulation>();
Population.SomeMethod();
Population.Clear();


I used the Clear method, but not works. Any idea?

Answer

The problem may be that Clear is not doing what you think it is. Clear simply marks the List as being empty without resizing the internal array that it uses behind the scenes. It will, however, remove all references to the individual BasePopulation instances. So if no other data structure has a reference to them they will be eligible for garbage collection. But, it will not reduce the size of the List directly. I just verified this using ILSpy.

You have two options.

  1. Set Population = null. This will unroot the entire object instance making it eligible for garbage collection.

  2. Call TrimExcess on this List. This will resize the internal array.

Comments