C#和#x27;使用';在循环中阻塞
我想知道在C#中使用“using”块的最佳方法是什么 方法1:在“使用”块内循环C#和#x27;使用';在循环中阻塞,c#,C#,我想知道在C#中使用“using”块的最佳方法是什么 方法1:在“使用”块内循环 void MyMethod(List<Prod> productList) { using(MyResource mr = new MyResource()) { foreach(Prod product in productList) { //Do something with the resource }
void MyMethod(List<Prod> productList)
{
using(MyResource mr = new MyResource())
{
foreach(Prod product in productList)
{
//Do something with the resource
}
}
}
void MyMethod(List<Prod> productList)
{
foreach(Prod product in productList)
{
using(MyResource mr = new MyResource())
{
//Do something with the resource
}
}
}
void MyMethod(列表产品列表)
{
使用(MyResource mr=new MyResource())
{
foreach(产品列表中的产品)
{
//对资源做点什么
}
}
}
方法2:在“使用”块外循环
void MyMethod(List<Prod> productList)
{
using(MyResource mr = new MyResource())
{
foreach(Prod product in productList)
{
//Do something with the resource
}
}
}
void MyMethod(List<Prod> productList)
{
foreach(Prod product in productList)
{
using(MyResource mr = new MyResource())
{
//Do something with the resource
}
}
}
void MyMethod(列表产品列表)
{
foreach(产品列表中的产品)
{
使用(MyResource mr=new MyResource())
{
//对资源做点什么
}
}
}
我想知道哪种方法更可取,为什么。两者之间会有性能差异吗?如果资源是。。。比如说数据库连接还是对象
谢谢 在方法1中,为循环创建一次资源 在方法2中,您在产品列表中的每个产品上创建一个新资源 除非有必要,否则不建议采用方法2 方法1有更好的性能,有创建/销毁的对象(和内存消耗)。尤其是在数据库中,如果存在池连接,则会发生事件。此:
using(MyResource mr = new MyResource())
{
//Do something with the resource
}
大致可以这样翻译:
MyResource mr = new MyResource();
try {
//Do something with the resource
} finally {
mr.Dispose();
}
但在第一个示例中,在结束的花括号之后,mr不可用
如果你在两个例子中都做了这个替换,你会发现它们是多么的不同。它们可以完成不同的事情——在某些情况下都是有效的。它决定了资源的范围。使用资源(变量)的外部将被释放
所以这取决于你的使用情况。通常,“使用”用于创建和处理连接,以确保在执行所需操作后正确关闭连接。这取决于您在使用mr实例的循环中所做的操作,以及mr实例是否可在循环之间重复使用。两者都是非常不同的事情。你如何比较两者?真的没有道理。如果您想为每个项目使用新资源,请使用第二种方法,否则使用第一种方法。如果您的资源是“可重用的”,也就是说,迭代不会使资源处于不重新打开就无法使用的状态,当然,第一种方法更好,因为每次迭代创建一个新对象不会浪费时间和内存,这是一个非常一般的问题。把准确的场景放进去,这样人们就可以提供帮助。@EgorShkorov这不是“当然”,因为你怎么知道编译器不会优化它呢?