Visual Basic .NET Language
Engångsföremål
Sök…
Grundläggande koncept för IDisposable
Varje gång du initierar en klass som implementerar IDisposable
bör du ringa. .Dispose
1 på den klassen när du är klar med den. Detta gör det möjligt för klassen att rensa upp alla hanterade eller obegränsade beroenden som den kan använda. Om du inte gör detta kan det orsaka minnesläckage.
Using
nyckelordet säkerställer att .Dispose
heter, utan att du behöver kalla det uttryckligen .
Till exempel utan att Using
:
Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()
Nu med Using
:
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using '.Dispose is called here for you
En viktig fördel med att Using
har är när ett undantag kastas, eftersom det säkerställer. .Dispose
kallas.
Tänk på följande. Om ett undantag kastas, måste du komma ihåg att ringa. Visa, men du kanske också måste kontrollera objektets tillstånd för att se till att du inte får ett referensfel med noll etc.
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
Ett användningsblock innebär att du inte behöver komma ihåg att göra detta och du kan förklara ditt objekt i 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 Måste jag alltid ringa Dispose () på mina DbContext-objekt? Nej
Förklara fler objekt i ett Använd
Ibland måste du skapa två Disposable
i rad. Det finns ett enkelt sätt att undvika häckar Using
block.
Den här koden
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 förkortas till den här. Den största fördelen är att du får en intryckningsnivå:
Using File As New FileStream("MyFile", FileMode.Append), Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using