C# Garbage Collector

Uno de los problemas presentes en lo que respecta a la gestión de la memoria en un computador es aquel en el cuál se debe gestionar la memoria de forma adecuada, de tal forma que esta conserve su integridad. Esta se ve afectada por diversos motivos, como pueden ser los "objetos olvidados en memoria", como variables, estructuras, arrays, etc, que pueden ocasionar que esta se llene. Para esto Microsoft pone a disposición de los programadores el Garbage Collector (Recolector de basura) que administra la asignación y liberación de la memoria en la aplicación. 




La memoria es finita, por lo cual el garbage collector debe realizar una recolección para liberar la memoria. Esto proporciona al usuario programador una gran ventaja como la de desarrollar aplicaciones sin tener que preocuparse de liberar la memoria. Además delega esta función al sistema lo que debería conllevar más eficacia.

El siguiente código escrito en C# ayuda a visualizar (mediante la creación de un gráfico) la forma en que trabaja el garbage Collector. Como podrán observar básicamente estamos creando un archivo txt en un a ruta determinada mediante el uso del SteamWriter. Tenemos dos líneas claves, la primera aquella donde tenemos la variable 'y' acumulando un valor más en cada bucle. Segundo la línea donde indicamos el método GC.GetTotalMemory, que muestra la memoria actual usada. 

try
     {
     string archivo = @" C:\New folder\miarchivo.txt" ;
     int y = 0;
     for ( int x = 0; x <= 1000; x++)
     {
          y++;

          if (! File.Exists(archivo))
          {
               using ( StreamWriter sw = File .CreateText(archivo))
               {
                    sw.WriteLine( "==Inicio==");
               }
          }

          using ( StreamWriter sw = File .AppendText(archivo))
          {
               sw.WriteLine(string.Format( "{0};{1}", x, GC.GetTotalMemory(false )));
          }
     }
     }
catch( Exception ex)
{
     Console.WriteLine(ex.Message);
}
Una vez ejecutado el código, este creará el archivo txt con los siguientes datos, tal como se aprecia líneas abajo.


Abramos un excel de tal forma que podamos cargar esta información en forma tabular, es decir, en columnas separadas mediante el punto y coma.


Finalmente, se verá así.


Una vez tengamos esto, podemos pasar a graficar dichos datos, recordar que el objetivo de todo es graficar el estado de la memoria en diferentes momentos del tiempo (expresados en la columna A).


Como observamos, la memoria tiene picos y valles. Estos están determinados por la intervención del garbage collector en el momento que este decida que es pertinente liberar la memoria de objetos no utilizados.

Nota: Este post solo pretende mostar una forma gráfica de entender el uso del GC. Existen muchos otros temas acerca de esta herramienta, que no son motivo de este post.

Alberto.


No hay comentarios.: