Destructores y Dispose

28/10/2005 - 08:40 por solusoft | Informe spam
Hola a todos,

tengo una clase Conexion, un recubrimiento de Connection de ADO.NET y hay
ocasiones que se producen errores en la destrucción del objeto. En modo Debug
aparecen errores de base de datos: No se ha inicializado el identificador o
similar.

tengo este código en mi clase Conexion

public void Dispose()
{
//System.GC.Collect();
//System.GC.SuppressFinalize(this);
}

/// <summary>
/// Destructor
/// </summary>
~Conexion()
{
if (this.ConexionBaseDatos != null)
this.ConexionBaseDatos.Dispose();
this.ConexionBaseDatos=null;
}


Qué podría hacer para solucionarlo ? Debo quitar el destructor ??

Gracias.

Preguntas similare

Leer las respuestas

#1 Miguel Ortiz Falcón
29/10/2005 - 06:42 | Informe spam
Bien, no se realmente con que finalidad uses esa clase, para detectar cual
sería la mejor propuesta para implementarla, pero asi "a secas" (y asumiendo
que quieres que deje de existir en cuanto salga del ámbito) deberías dejar
sólo el destructor y complementarlo por ejemplo checando si la conexión está
abierta cerrarla antes de llamar a Dispose()

Saludos...!

Miguel Ortiz Falcón



"solusoft" wrote:

Hola a todos,

tengo una clase Conexion, un recubrimiento de Connection de ADO.NET y hay
ocasiones que se producen errores en la destrucción del objeto. En modo Debug
aparecen errores de base de datos: No se ha inicializado el identificador o
similar.

tengo este código en mi clase Conexion

public void Dispose()
{
//System.GC.Collect();
//System.GC.SuppressFinalize(this);
}

/// <summary>
/// Destructor
/// </summary>
~Conexion()
{
if (this.ConexionBaseDatos != null)
this.ConexionBaseDatos.Dispose();
this.ConexionBaseDatos=null;
}


Qué podría hacer para solucionarlo ? Debo quitar el destructor ??

Gracias.

Respuesta Responder a este mensaje
#2 Octavio Hernandez
29/10/2005 - 14:42 | Informe spam
Hola,

La idea parece correcta, lo único que me parece sospechoso es la llamada a
GC.Collect dentro del Dispose. Prueba quitándola o al menos poniéndola
DETRAS de la llamada SupressFinalize.

Slds - Octavio

"solusoft" escribió en el mensaje
news:
Hola a todos,

tengo una clase Conexion, un recubrimiento de Connection de ADO.NET y hay
ocasiones que se producen errores en la destrucción del objeto. En modo
Debug
aparecen errores de base de datos: No se ha inicializado el identificador
o
similar.

tengo este código en mi clase Conexion

public void Dispose()
{
//System.GC.Collect();
//System.GC.SuppressFinalize(this);
}

/// <summary>
/// Destructor
/// </summary>
~Conexion()
{
if (this.ConexionBaseDatos != null)
this.ConexionBaseDatos.Dispose();
this.ConexionBaseDatos=null;
}


Qué podría hacer para solucionarlo ? Debo quitar el destructor ??

Gracias.

Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
29/10/2005 - 15:44 | Informe spam
Lo que deberias hacer es implementar el patron Dispose:

public class MiClase : IDisposable {

// Flag para hacer seguimiento del estado
private bool disposed = false;

public BaseResource()
{
}

public void Dispose() {

Dispose(true);

// Si se llamo a Dispose no hace falta
// llamar al destructor
GC.SuppressFinalize(this);

}

// disposing nos indica si se esta llamando desde
// Dispose o desde el destructor
protected virtual void Dispose(bool disposing) {

// Ya fue llamado Dispose?
if(!disposed) {

if(disposing) {
// Liberar recursos manejados
}

// Liberar recursos no manejados

}

disposed = true;

}

~BaseResource() {
Dispose(false);
}

public void MiRutina() {

if(disposed)
throw new ObjectDisposedException();

}

}

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
29/10/2005 - 19:51 | Informe spam
Estaba apurado y no me di cuenta de que estan mal los nombres del
constructor y destructor!

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida