A ver C# usa el GC (Garbaje Collector) por lo que tu no controlas la memoria que creas... pero tienes varias formas de trabajo a seguir:
- Llamar directamente al GC cada vez que consideres con GC.Collect() ... creo, esto no garantiza que se vacie la memoria, simplemente le dices a CSharp: "Oye a ver si puedes borrar memoria sin uso y CSharp dice bueno va luego me paso y miro", ten cuenta que cada vez que hagas un new en .NET se guarda un registro de todos esos objectos y GC solo borra los objetos que dejan de estar referenciados en el programa, osea, cuando termines con un objecto haz: objeto = null; pero tampoco te pases llamando al GC porque gasta bastante tiempo de la CPU
- Usar el método Dispose() cuando termines de trabajar con un objeto, este método existe en todas las clases que reservan recursos como por ejemplo conectores a base de datos, contenedores de Bitmaps, ... lo que hace es liberarlos, por ejemplo en un conector a base de datos lo que haria es liberar el socket, si solo lo asignas a NULL el socket sigue estando abierto lo cual repercute en tener mas conexiones abiertas a la base de datos
- Si tus clases son de usar recursos a saco hazles que hereden de IDisposable para implementar el método Dispose()... lo cual debes programar tu... tu sabras lo que tienes que liberar
- Utilizar using, si la forma de trabajar con dispose seria:
ClaseChupaRecursos a = new ClaseChupaRecursos(Recursos.ATope);
try
{
//Hago lo que tenga que hacer con a
}
finally
{
a.Dispose(); //pete o no pete libero recursos
}
con using ahorras codigo y hace lo mismo:
using(ClaseChupaRecursos a = new ClaseChupaRecursos(Recursos.ATope))
{
//Hago lo que tenga que hacer con a
}