【发布时间】:2015-02-27 15:35:47
【问题描述】:
我想知道在 C# 中使用“using”块的最佳方式是什么。
方法 1:在“使用”块内循环
void MyMethod(List<Prod> productList)
{
using(MyResource mr = new MyResource())
{
foreach(Prod product in productList)
{
//Do something with the resource
}
}
}
方法 2:在“使用”块之外循环
void MyMethod(List<Prod> productList)
{
foreach(Prod product in productList)
{
using(MyResource mr = new MyResource())
{
//Do something with the resource
}
}
}
我想知道哪种方法更可取以及为什么。两者之间会有性能差异吗?另外,如果资源是……比如数据库连接或对象,它有什么不同?
谢谢!
【问题讨论】:
-
这取决于您在循环内对 mr 实例执行的操作以及 mr 实例是否可在循环之间重用。
-
两者是非常不同的东西。你怎么能比较两者?真的没有意义。如果您想为每个项目使用新资源,请使用第二个,否则首先。
-
如果你的资源是“可重用的”,也就是说,迭代不会将资源置于不重新打开就不能再使用的状态,当然第一种方法更好,因为你不要通过每次迭代创建一个新对象来浪费时间和内存
-
非常笼统的问题。给出确切的场景,以便人们可以提供帮助。
-
@EgorShkorov 这不是“当然”,因为你怎么知道编译器不会优化它?
标签: c#