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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow