he crear una aplicación de C# que utiliza hasta 150 MB de memoria (bytes privados), debido principalmente a un gran diccionario:liberar memoria explícitamente en C#
Dictionary<string, int> Txns = new Dictionary<string, int>();
me preguntaba cómo liberar esta memoria hasta. He intentado esto:
Txns = null;
GC.Collect();
Pero no parece hacer mucha mella en mis bytes privados - que haya que dejar de decir 155 Mb a 145MB. ¿Alguna pista?
Gracias
operación -Editar-
Está bien que estoy teniendo más suerte con este código (se pone los bytes privados hasta 50 MB), pero ¿por qué?
Txns.Clear(); // <- makes all the difference
Txns = null;
GC.Collect();
operación -Editar-
Está bien para todo el que dice 'no utilizan gc.collect', justo lo suficiente (que no voy a discutir que, aparte de decir que puede ver mi fondo C llegando), pero realmente no responde mi pregunta: ¿Por qué el recolector de basura solo libera la memoria si borro primero la lista de transacciones? ¿No debería liberar la memoria de todos modos, ya que el diccionario ha sido desreferenciado?
GC.Collect() no exige que toda la memoria que se pueda recopilar se recopile en ese momento, ya que la recolección de basura es un proceso de varios pasos. Un proceso que podría agregar es que generalmente no necesita saber los detalles sobre ... – peSHIr
¿Es necesario establecer Txns como nulo? ¿Hará alguna diferencia? o simplemente Borrar el contenido es suficiente (para liberar memoria)? – akjoshi