Visual Basic .NET Language
Wegwerp objecten
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