Ricerca…


Concetto di base di IDisposable

Ogni volta che istanziati una classe che implementa gli IDisposable , dovresti chiamare .Dispose 1 su quella classe quando hai finito di usarla. Ciò consente alla classe di eliminare tutte le dipendenze gestite o non gestite che potrebbe essere in uso. Non farlo potrebbe causare una perdita di memoria.

La parola chiave Using assicura che .Dispose chiamato .Dispose , senza che tu debba chiamarlo esplicitamente .

Ad esempio senza Using :

Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()    

Ora con l' Using :

Using sr As New StreamReader("C:\foo.txt")
    Dim line = sr.ReadLine
End Using '.Dispose is called here for you

Uno dei principali vantaggi Using ha è quando viene generata un'eccezione, perché assicura .Dispose viene chiamato.

Considera quanto segue. Se viene generata un'eccezione, è necessario ricordare di chiamare .Dispositivo, ma potrebbe anche essere necessario controllare lo stato dell'oggetto per assicurarsi di non ottenere un errore di riferimento nullo, ecc.

    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 blocco usando significa che non devi ricordarti di farlo e puoi dichiarare il tuo oggetto all'interno 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 Devo sempre chiamare Dispose () sui miei oggetti DbContext? no

Dichiarare più oggetti in un solo utilizzo

A volte, devi creare due oggetti Disposable in fila. C'è un modo semplice per evitare l'annidamento Using blocchi.

Questo codice

Using File As New FileStream("MyFile", FileMode.Append)
    Using Writer As New BinaryWriter(File)
        'You code here
        Writer.Writer("Hello")
    End Using
End Using

può essere abbreviato in questo Il vantaggio principale è che ottieni un livello di indentazione:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow