nan*_*nan 6 c# scope sqlconnection using-statement
我使用using语句SqlConnection.它对性能有好处,因为强制调用Dispose()会更快地释放与池的连接.
但是,我意识到在使用中创建的对象无法重新定义.我不能这样做:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//...
connection = new SqlConnection(connectionString2);
//...
connection = new SqlConnection(connectionString3);
}
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以替换使用,并做这样的事情:
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
//...
connection = new SqlConnection(connectionString2);
//...
connection = new SqlConnection(connectionString3);
}
Run Code Online (Sandbox Code Playgroud)
该SqlConnection不会是最后一次入店后}梅开二度.当对象超出范围时,Dispose()会立即被调用吗?
Jus*_*ner 13
不,在第二个例子中,事情不会自动清理(实际上,使用您拥有的代码,您将保持几个连接处于打开状态).
不仅如此,如果在using块内抛出异常,则会丢失自动清理.请记住,using块分解为:
SqlConnection connection = new SqlConnection(connectionString);
try
{
connection.Open();
// Do work
}
finally
{
connection.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
如果你真的使用不同的连接,并且每个连接在块的末尾都是Disposed,我将使用几个使用块:
using(SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// Do Work
}
// First connection is disposed
using(SqlConnection connection = new SqlConnection(connectionString2))
{
// Do More Work
}
// Second connection is disposed
using(SqlConnection connection = new SqlConnection(connectionString3))
{
// Do More Work
}
// Last connection is dipsosed
Run Code Online (Sandbox Code Playgroud)
该using语句是语法糖,它调用Dispose在其中初始化的对象(),因此您不能像在示例中那样简单地替换它.
您将注意到,在using语句中可以使用的唯一对象是那些实现的对象IDisposable,这可以确保Dispose可以调用它们.
由于此文章解释,编译器将改变这一点:
using (MyResource myRes = new MyResource())
{
myRes.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
对此:
MyResource myRes= new MyResource();
try
{
myRes.DoSomething();
}
finally
{
if (myRes!= null)
((IDisposable)myRes).Dispose();
}
Run Code Online (Sandbox Code Playgroud)
因此,除非您复制此结构,否则您将无法获得相同的行为.
另外 - 按照你的例子重用变量是不好的做法.读取代码的人可能会认为他们正在查看连接1,当他们实际上看着2或3.可能会导致非常混乱并导致各种问题.
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |