对资源密集型操作(例如打开数据库连接)的最佳实践的共识似乎是使用Using
块,因为Using
块“保证资源的处置......即使在未处理的异常的情况下”。.
以下是我发现的大多数示例的编写方式:
Sub ExecuteCommand(ByVal sql As String, ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
Dim command As New SqlCommand(sql, connection)
command.Connection.Open()
command.ExecuteNonQuery()
End Using
End Sub
但是允许嵌套Using
块,我偶尔(但很少)看到上面写成:
Sub ExecuteCommand(ByVal sql As String, ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
Using command As New SqlCommand(sql, connection)
command.Connection.Open()
command.ExecuteNonQuery()
End Using
End Using
End Sub
Using
我的问题:多个嵌套块有什么好处吗?或者单个 Using 块是否已经保证它包含的所有资源都将被释放?
(注意:我的代码在 VB.NET 中,但同样的问题也适用于 C#。)