Bri*_*ian 4 c# sql dispose sqlconnection sqldatareader
我注意到了这个问题,但我的问题更加具体.
使用是否有任何好处
using (SqlConnection conn = new SqlConnection(conStr))
{
using (SqlCommand command = new SqlCommand())
{
// dostuff
}
}
Run Code Online (Sandbox Code Playgroud)
代替
using (SqlConnection conn = new SqlConnection(conStr))
{
SqlCommand command = new SqlCommand();
// dostuff
}
Run Code Online (Sandbox Code Playgroud)
显然,如果您计划使用相同的连接运行多个命令,这很重要,因为关闭a SqlDataReader比关闭并重新打开连接更有效(调用conn.Close();conn.Open();也会释放连接).
我看到许多人坚持认为未能关闭SqlDataReader手段会留下开放的连接资源,但这不仅适用于您不关闭连接的情况吗?
Jam*_*Ide 16
在我看来,这里有两条规则:
using块中.也就是说,即使您知道处置连接对象负责处理其关联的命令对象,您也不应该依赖此行为.
顺便说一下,可以以更干净的方式使用块来嵌套:
using (SqlConnection conn = new SqlConnection(conStr))
using (SqlCommand command = new SqlCommand())
{
// dostuff
}
Run Code Online (Sandbox Code Playgroud)
我会用
SqlCommand command = conn.CreateCommand();
Run Code Online (Sandbox Code Playgroud)
而不是创建一个新的SqlCommand,然后将其与连接相关联.
从技术上讲,它不是必需的; 关闭a SqlConnection应该销毁SqlDataReader正在使用的任何资源.反之亦然; 你不需要Dispose的SqlConnection,如果你配置一个SqlDataReader是与创建CommandBehavior.CloseConnection.
实际上,当一个类实现时IDisposable,你应该在Dispose它完成它时使用它.框架类的实现细节随时可能发生变化,除非文档特别概述Dispose了实例不需要的情况,否则将来某些更改/更新将导致您的代码具有资源泄漏.
这真的没有额外的努力 - 所以只需将它包装在一个using块中.
| 归档时间: |
|
| 查看次数: |
9833 次 |
| 最近记录: |