Suche…


Grundkonzept von IDisposable

Jedes Mal, wenn Sie eine Klasse instanziieren, die IDisposable , sollten Sie .Dispose 1 für diese Klasse aufrufen, wenn Sie die Verwendung beendet haben. Dadurch kann die Klasse verwaltete oder nicht verwaltete Abhängigkeiten bereinigen, die sie möglicherweise verwendet. Andernfalls kann es zu einem Speicherverlust kommen.

Das Schlüsselwort Using sorgt dafür, dass .Dispose aufgerufen wird, ohne dass Sie es explizit aufrufen müssen.

Zum Beispiel ohne Using :

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

Jetzt mit Using :

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

Ein großer Vorteil bei der Using ist, wenn eine Ausnahme ausgelöst wird, da sichergestellt ist, dass .Dispose aufgerufen wird.

Folgendes berücksichtigen. Wenn eine Ausnahme ausgelöst wird, müssen Sie daran denken, .Dispose aufzurufen, müssen jedoch möglicherweise auch den Status des Objekts überprüfen, um sicherzustellen, dass Sie keinen Nullreferenzfehler erhalten.

    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

Ein using-Block bedeutet, dass Sie sich nicht daran erinnern müssen, und Sie können Ihr Objekt innerhalb des try deklarieren:

    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 Muss ich Dispose () immer für meine DbContext-Objekte aufrufen? Nee

Mehrere Objekte in einem deklarieren Using

Manchmal müssen Sie zwei Disposable in einer Reihe erstellen. Es gibt eine einfache Möglichkeit, das Verschachteln Using Blöcken zu vermeiden.

Dieser Code

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

kann in diese gekürzt werden. Der Hauptvorteil ist, dass Sie eine Einrückungsstufe erhalten:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow