Поиск…


Основная концепция IDisposable

Каждый раз, когда вы создаете экземпляр класса, который реализует IDisposable , вы должны позвонить. .Dispose 1 в этом классе, когда вы закончите использовать его. Это позволяет классу очищать любые управляемые или неуправляемые зависимости, которые он может использовать. Не делать этого может привести к утечке памяти.

Ключевое слово Using гарантирует, что .Dispose , без необходимости явно его вызывать.

Например без Using :

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

Теперь с Using :

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

Одно из основных преимуществ Using - это когда генерируется исключение, потому что оно обеспечивает .Dispose вызывается.

Рассмотрим следующее. Если выбрано исключение, вам нужно не забудьте вызвать. Задайте, но вы также можете проверить состояние объекта, чтобы убедиться, что вы не получили нулевую ошибку ссылки и т. Д.

    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

Использование блока означает, что вам не нужно помнить об этом, и вы можете объявить свой объект внутри 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 Всегда ли мне нужно вызывать Dispose () для объектов DbContext? Нету

Объявление большего количества объектов в одном

Иногда вам нужно создать два Disposable объекта подряд. Существует простой способ избежать вложенности Using блоков.

Этот код

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

можно укоротить в эту. Главное преимущество заключается в том, что вы получаете один уровень отступов:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow