这两个片段做同样的事情 - 是否有一个比另一个好,或者只是一个偏好的问题?
Using context As MyDatabaseDataContext = New MyDatabaseDataContext()
Dim test = context.Employees.Count
End Using
VS
Dim context As MyDatabaseDataContext = New MyDatabaseDataContext()
Dim test = context.Employees.Count
我意识到这些是过于简单的例子 - 一种方法比另一种方法效果好的情况是什么?
答案 0 :(得分:10)
第一次在Dispose
语句末尾调用Using
- 这是Using
语句的要点。它等同于Try / Finally,因此即使抛出异常,也会处置资源。
答案 1 :(得分:3)
Tony the Pony的答案是准确的,使用的目的是在完成对象后处理非托管资源。等效代码:
Using context As New MyDatabaseDataContext()
Dim test = context.Employees.Count
End Using
将是:
Dim context As New MyDatabaseDataContext()
Try
Dim test = context.Employees.Count
Finally
If context IsNot Nothing
context.Dispose()
End If
End If
答案 2 :(得分:2)
这两个片段不会做同样的事情。第一个将在使用块结束时处理您的数据上下文,即使抛出异常也是如此。后一个片段不会丢弃它,这可能会留下额外的数据库连接。
答案 3 :(得分:1)
第一个调用Using
块末尾的dispose。所以是的,那里有一个优势。
使用LINQ2SQL DataContext,您必须小心延迟执行。您不希望在Using
块中放置延迟查询,并在Using
块后枚举结果。您将获得有关正在处理的上下文的例外情况。
将Using
块与WCF服务客户端一起使用时,您还必须小心。您可能会遇到异常传播问题。
答案 4 :(得分:1)
当你使用时 - 对象在使用范围的最后被破坏,而不是以后。 如果该对象具有要处置的特殊资源 - 它将更早地释放它们 - 所以当您使用数据库连接时 - 例如,使用“使用”将是智能的。
答案 5 :(得分:0)
使用保证,即使抛出异常,也会在块末尾的上下文中调用Dispose方法。
使用文件,数据库连接等一次性资源时非常重要。