Hola, voy a formular una pregunta, posiblemente sea tonta, cuando un
procedimento o metodo e instancio una clase en un objeto y este objeto se
encarga de abrir una conexion y ejecutar una consulta SQL entre otras cosas,
cuando termina dicho procedimiento o método el objeto se descarga de memoria
¿no?, es aconsejable de descargar el objeto antes de que termine el metodo
MiObjeto = nothing o MiObjeto.Dispose es que por ahorrar líneas hago esto:
1º Acción
Public Function ObtenerCliente(Byval Codigo as String) as DataSet
Dim oMiFuenteDatos as New GestionData
Return oMiFuenteDatos.ObtenerDataSet("Clientes", "Cod = '" + Codigo +
"'")
End Function
¿Seria mejor hacer esto o es igual? :
2º Acción
Public Function ObtenerCliente(Byval Codigo as String) as DataSet
Dim oMiFuenteDatos as New GestionData
Dim dtCli as DataSet
dtCli = oMiFuenteDatos.ObtenerDataSet("Clientes", "Cod = '" + Codigo +
"'")
oMiFuenteDatos.Dispose
oMiFuenteDatos = Nothing
Return dtCli
End Function
Esta es la clase GestionData que incluyo un Dispose para cerrar y descargar
la conexion
Public Class GestionData
Private mConexion As System.Data.IDbConnection
Public Sub New
AbrirConexion
End Sub
Private Sub AbrirConexion
'// Codificar Abrir conexion
End Sub
Public Funciton ObtenerDataSet(Byval NombreTabla as String, Byval
Condicion as string) as DataSet
'// Codificar Devolver DataSet
End Function
Public Sub Dispose
mConexion.Close
mConexion.Dispose
End Sub
End Class
Mi pregunta es en la primera Acción ¿Se ejecutaría el Dispose implementado
en la Clase GestionData?
En el caso que es correcto no hace falta hacer esto oMiFuenteDatos.Dispose
oMiFuenteDatos = Nothing en la segunda Acción, ¿no?
Bueno yo lo que suelo hace es la primero Accion pues creo que si se ejecuta
Dispose cuando el recolector de basura descarga el objeto oMiFuenteDatos que
ha instanciodo dicha clase. Con esto me ahorro líneas y es más limpio.
¿Qué opinais?
Un Saludo
Leer las respuestas