Szukaj…


Podstawowa koncepcja IDisposable

Za każdym razem, gdy tworzysz instancję klasy, która implementuje IDisposable , powinieneś wywołać .Dispose 1 na tej klasie po zakończeniu jej używania. Pozwala to klasie wyczyścić wszelkie zarządzane lub niezarządzane zależności, których może używać. Nie wykonanie tego może spowodować wyciek pamięci.

.Dispose kluczowe Using zapewnia, że .Dispose jest .Dispose , bez konieczności jawnego wywoływania go.

Na przykład bez Using :

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

Teraz z Using :

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

Jedną z głównych zalet Using jest rzucanie wyjątku, ponieważ zapewnia on .Dispose .

Rozważ następujące. Jeśli zgłoszony zostanie wyjątek, musisz pamiętać o wywołaniu funkcji .Dysponuj, ale może być również konieczne sprawdzenie stanu obiektu, aby upewnić się, że nie wystąpił błąd zerowej referencji itp.

    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

Blok używający oznacza, że nie musisz tego robić i możesz zadeklarować swój obiekt w ramach 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 Czy zawsze muszę wywoływać Dispose () na moich obiektach DbContext? nie

Deklarowanie większej liczby obiektów w jednym Korzystanie

Czasami musisz utworzyć dwa obiekty Disposable z rzędu. Istnieje prosty sposób na uniknięcie zagnieżdżania się. Using bloków.

Ten kod

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

można skrócić do tego. Główną zaletą jest to, że zyskujesz jeden poziom wcięcia:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow