Zoeken…


Basisconcept van IDisposable

.Dispose wanneer u een klasse instantieert die IDisposable , moet u .Dispose 1 voor die klasse bellen wanneer u klaar bent met het gebruiken. Hiermee kan de klasse alle beheerde of niet-beheerde afhankelijkheden opruimen die mogelijk worden gebruikt. Als u dit niet doet, kan dit geheugenlekken veroorzaken.

Het trefwoord Using zorgt ervoor dat .Dispose wordt aangeroepen, zonder dat u het expliciet hoeft te noemen.

Bijvoorbeeld zonder te Using :

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

Nu met Using :

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

Een groot voordeel van het Using is dat er een uitzondering wordt gegenereerd, omdat dit zorgt dat .Dispose wordt aangeroepen.

Stel je de volgende situatie voor. Als een uitzondering wordt gegenereerd, moet je onthouden.

    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

Een gebruiksblok betekent dat u dit niet hoeft te onthouden en dat u uw object binnen de try kunt aangeven:

    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 Moet ik altijd Dispose () aanroepen op mijn DbContext-objecten? Nee

Meer objecten in één declareren

Soms moet u twee Disposable achter elkaar maken. Er is een gemakkelijke manier om te voorkomen dat nesten Using blokken.

Deze 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

kan hier worden ingekort. Het belangrijkste voordeel is dat u één inspringingsniveau bereikt:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow