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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow