Saltar al contenido

trabajando con variables 3/3 : Variables desechables

24 septiembre, 2012

Muchas veces una variable es utilizada en un determinado contexto o porción de código y luego que es utilizada lo mas útil es deshacerse de ella, para ello se utiliza la interfaz Disposable y su método Dispose(). Este metodo permite gestionar programáticamente las acciones que deben realizarse para liberar los recursos de los objetos; aunque esto puede sonar  un poco enredado, es relativamente sencillo,  veámoslo con un ejemplo tomado de un artículo anterior donde revisabamos la forma de manejar una bitácora de eventos, esta bitácora al heredar de la clase Component implementa el método Dispose() . en nuestro artículo original (si no tienes el proyecto tratado en el artículo mencionado, no hay lío, lo puedse descargar) vimos anteriormente que se podía usar el eventLog de esta forma:

private void button1_Click(object sender, EventArgs e)
        {
          label1.Text = "hola mundo";
          if (_DEBUG)
              eventLog1.WriteEntry("se ha hecho click", System.Diagnostics.EventLogEntryType.Information,0);
         
        }

lo cual permite escribir en esa bitácora (para poderla visualizar en el visor de eventos de windows) cada vez que se presiona el botón, pero no controla si el objeto debe ser descartado, por lo que seguirá en memoria hasta que se invoque al método Dispose()  o se acabe el programa (lo que primero ocurra)

si queremos hacer un uso mas eficiente de memoria podemos crear y destruir el objeto eventlog bajo demanda logrando que el nuestro código quede así:

   private void button1_Click(object sender, EventArgs e)
        {
          label1.Text = "hola mundo";
        
         
         
              if (_DEBUG)
              {
                  eventLog1 = new System.Diagnostics.EventLog("", Environment.MachineName, "hola mundo");   //inicialización de eventLog1
                  eventLog1.WriteEntry("se ha hecho click", System.Diagnostics.EventLogEntryType.Information, 0);
                  eventLog1.Dispose(); // desechado de eventlog1 
              }
          
           }

esto hace que el código sea mas eficiente frente al uso de memoria aunque requiere que el desarrollador controle la creación y destrucción del código, una forma mas eficiente para esto es utilizando la palabra reservada using la cual automatiza un poco el proceso de creación y destrucción del objeto, para nuestro ejemplo esto quedaría de esta forma:

  private void button1_Click(object sender, EventArgs e)
        {
          label1.Text = "hola mundo";
        
         
         
              if (_DEBUG)
              {
                  using (eventLog1 = new System.Diagnostics.EventLog("", Environment.MachineName, "hola mundo"))   //inicialización de eventLog1
                  {
                  eventLog1.WriteEntry("se ha hecho click", System.Diagnostics.EventLogEntryType.Information, 0);
                  }
              }
         }

Este tipo de cláusula es muy frecuente en el manejo de archivos y conexiones a bases de datos puesto que libera al programador de estar pendiente de los eventos de creación y destruccción de este tipo de objetos.

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: