我理解在从应用程序连接到sql server时使用using
块的概念,因为它会在超出范围时关闭连接并节省我们编写时间{{1}块。
但我的问题是,在初始化try catch finally
时使用using
是否有任何好处,通常我会这样做:
SqlCommand
但是通过在使用string cs = ConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
using(SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.City", con);
con.Open();
DropDownList1.DataSource = cmd.ExecuteReader();
DropDownList1.DataTextField = "City";
DropDownList1.DataValueField = "ID";
DropDownList1.DataBind();
}
中使用SqlCommand初始化可以获得哪些好处?
block
我在网上搜索过的所有资料都说明连接一旦超出范围就会被关闭,是的,我理解但是将SqlCommand放入使用块会使它变得更高效吗?
非常感谢任何建议或指示,谢谢。
答案 0 :(得分:4)
查看源代码时,您可以清楚地看到这一点。
的实施override protected void Dispose(bool disposing)
{
if (disposing)
{
_cachedMetaData = null;
}
base.Dispose(disposing);
}
正如您所看到的,这并没有多大帮助。但是,在查看base.Dispose
:
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
SqlCommand
继承自DbCommand
,Component
继承自Component
。 SqlCommand
实现了finalizer,这意味着一旦没有人引用该对象,该对象就不会被处理掉,因为它仍然引用了finalizer queue。
当您使用using
语句包装SqlCommand
时,其中最重要的部分是其基类(Component)调用GC.SupressFinialize
,这将删除对终结器队列的引用,一旦GC启动,就可以收集对象。
这就是IDisposable
实现{{1}}的原因,应该予以处理。