Visual Basic .NET Language
Objetos desechables
Buscar..
Concepto básico de IDisposable.
Cada vez que crea una instancia de una clase que implemente IDisposable
, debe llamar a .Dispose
1 en esa clase cuando haya terminado de usarla. Esto permite que la clase limpie las dependencias administradas o no administradas que pueda estar usando. No hacer esto podría causar una pérdida de memoria.
La palabra clave Using
garantiza que se .Dispose
, sin que tenga que llamarlo explícitamente .
Por ejemplo, sin Using
:
Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()
Ahora con el Using
:
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using '.Dispose is called here for you
Una de las principales ventajas que Using
tiene es cuando se lanza una excepción, porque garantiza que se .Dispose
.
Considera lo siguiente. Si se produce una excepción, debe recordar llamar .Disponer, pero es posible que también deba verificar el estado del objeto para asegurarse de que no reciba un error de referencia nulo, etc.
Dim sr As StreamReader = Nothing
Try
sr = New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
Catch ex As Exception
'Handle the Exception
Finally
If sr IsNot Nothing Then sr.Dispose()
End Try
Un bloque de uso significa que no tiene que recordar hacer esto y puede declarar su objeto dentro del try
:
Try
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using
Catch ex As Exception
'sr is disposed at this point
End Try
1 ¿Siempre tengo que llamar a Dispose () en mis objetos DbContext? No
Declarando más objetos en uno usando
A veces, tienes que crear dos objetos Disposable
en una fila. Hay una manera fácil de evitar el anidamiento Using
bloques.
Este codigo
Using File As New FileStream("MyFile", FileMode.Append)
Using Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using
End Using
se puede acortar en este. La principal ventaja es que ganas un nivel de sangría:
Using File As New FileStream("MyFile", FileMode.Append), Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using