Visual Basic .NET Language
Oggetti usa e getta
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