VB.NET使用多个USING语句和仅使用一个语句之间的区别

时间:2011-02-11 14:47:39

标签: vb.net performance using-statement

哪一个最好接近以下?或两者都有相同的效果?

Dim carrierName As String
Dim someotherName As String
Dim anotherOne As String

Using oDa As New MyCompany.DataAccess.MyModule
     carrierName = oDa.GetCarrierName(itemNumber)
End Using

Using oDa As New MyCompany.DataAccess.MyModule
     someotherName = oDa.GetSomeOtherName(itemNumber,1)
End Using

Using oDa As New MyCompany.DataAccess.MyModule
     anotherOne = oDa.GetAnotherName("somevalue")
End Using

OR

Using oDa As New MyCompany.DataAccess.MyModule
     carrierName = oDa.GetCarrierName(itemNumber)   
     someotherName = oDa.GetSomeOtherName(itemNumber,1)   
     anotherOne = oDa.GetAnotherName("somevalue")
End Using

4 个答案:

答案 0 :(得分:3)

好吧,一个版本将创建三个MyModule个实例,另一个版本只会创建一个。如果不了解更多关于MyModule的信息,我们无法分辨出差异。

第二种方法对我来说看起来更干净,但是如果不知道语义差异,很难说它肯定更好。

答案 1 :(得分:0)

首先,您要创建和处理MyModule的 3 实例,而在第二个实例中,您只创建和处理 1 实例。所以第二种方法更好。它也更清洁,更直接。

答案 2 :(得分:0)

这两种方法在本质上是不同的,但最终结果取决于你的MyModule实现。

第二个似乎更好,因为它只创建和管理一个MyModule对象,特别是如果创建和处置MyModule成本很高。

如果MyModule不允许具有相同实例的多个请求,则可能需要第一个。但如果它是cas。下摆......对我来说这看起来像个小虫。

答案 3 :(得分:0)

后者在大多数情况下更好。使用只是

的快捷方式
var oDa = new MyCompany.DataAccess.MyModule();
try {
    carrierName = oDa.GetCarrierName(itemNumber)   
    someotherName = oDa.GetSomeOtherName(itemNumber,1)   
    anotherOne = oDa.GetAnotherName("somevalue")
}
finally {
    oDa.Dispose();
}

当每个方法分配大量需要立即清理的内存时,可以使用第一种方法,但我不认为这是你的情况。

顺便说一下:你似乎误将c#与visual basic

混淆了