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