수색…


IDisposable의 기본 개념

IDisposable 을 구현하는 클래스를 인스턴스화 할 때마다 사용을 마쳤 .Dispose 해당 클래스의 .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 가 호출 되도록 하기 때문에 예외가 발생하는 것입니다.

다음을 고려하세요. 예외가 발생하면 .Dispose를 호출하는 것을 기억해야하지만 null 참조 오류가 발생하지 않도록 개체의 상태를 확인해야 할 수도 있습니다.

    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

Using 블록은 이것을 수행 할 필요가 없음을 의미하며 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 DbContext 객체에 항상 Dispose ()를 호출해야합니까? 아니

하나의 객체 더 선언

때로는 연속으로 두 개의 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