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
。
考慮以下。如果丟擲異常,你需要記住呼叫 .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