Epa!
Tengo una duda con el metodo dispose y en general con toda la
parafernalia mutante esta de los finalizes, disposes y tal.
Segun tengo entendido el gc en accion cuando lo considera oportuno y
llama al metodo finalize del objeto en cuestion para terminarlo.
Entiendo entonces q todos los recursos supervisados por la plataforma
son liberados. El tema viene de una clase q estoy haciendo q lleva
acceso a base de datos y segun tengo entendido ese tipo de recurso no es
supervisado, con lo que al destruirlo hay q liberarlo. Leyendo en la
ayuda del studio veo un ejemplo de como implementar un metodo dispose y
me surge la duda. Primero el codigo
Public Class MiClase
Implements IDisposable
'aqui el metodo dispose sobrecargado
Public Overloads Sub Dispose()Implements IDisposable.Dispose
'llama la dispose de mas abajo
Dispose(true)
'esto es para retirar al obejto de la lista de limpieza del gc
GC.SuppressFinalize(Me)
End Sub
'dispose con 1 booleano: si true limpia todo, si false solo los recursos
unmanaged
Protected Overloads Overridable Sub Dispose(disposing As Boolean)
' Check to see if Dispose has already been called.
If Not (Me.disposed) Then
' If disposing equals true, dispose all managed
' and unmanaged resources.
If (disposing) Then
' Dispose managed resources.
Components.Dispose()
End If
' Release unmanaged resources. If disposing is false,
' only the following code is executed.
'(codigo para liberar unmanaged)
End If
Me.disposed = true
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
Biueno, lo q no entiendo es el porque del dispose (boolean) y distinguir
la liberacion de recursos supervisados y no supervisados. Y porque en el
finalize hace un dispose(false) osea, solo libera el unmanaged en vez
liberarlo todo (en la ayuda pone 'porque no se puede' :? y se quedan tan
panchos)
Muchas gracias y un saludo
Leer las respuestas