C# 如果我没有';我不能打开它吗?

C# 如果我没有';我不能打开它吗?,c#,asp.net,dispose,sqlconnection,C#,Asp.net,Dispose,Sqlconnection,我们偶尔会遇到需要重新启动的SqlServer锁定,我正在检查遗留代码,试图找出原因 在每个c#ASP.Net页面中包含的库文件中,我发现: sConString = ConfigurationSettings.AppSettings.Get("SQLConnString"); oCon = new SqlConnection(sConString); 如果页面不访问数据库,则以 oCon.Open(); 最后是: oCon.Close(); oCon.Dispose(); 但是

我们偶尔会遇到需要重新启动的SqlServer锁定,我正在检查遗留代码,试图找出原因

在每个c#ASP.Net页面中包含的库文件中,我发现:

sConString  = ConfigurationSettings.AppSettings.Get("SQLConnString"); 
oCon = new SqlConnection(sConString);
如果页面不访问数据库,则以

oCon.Open();
最后是:

oCon.Close();   
oCon.Dispose();
但是有些页面不进行数据库访问,因此没有
Dispose()已调用

我的问题是,创建一个
SqlConnection
而没有得到
Disposed()
,是否会造成开销


感谢您的建议

如果连接未打开,则无需调用
Dispose
,当您创建SQL连接实例时,它只是普通的托管资源,将由CLR自动释放。无论如何,就灵活性和可维护性而言,关闭或处理任何SQL连接都是一种好的做法。

dispose()与内存管理的关系大于与连接管理的关系。我认为这不会解决你的问题。您可能希望确保在Try-Catch的finally块中关闭连接。这样,如果打开的连接成功与否,连接将被关闭。

我不明白,为什么未打开的连接会导致服务器锁定。只要
Dispose
,CLR就会自动处理它。唯一需要担心的是,每个
打开
都应该有一个相应的
关闭
。如果不使用它,为什么要创建它?@AustinSalonen,连接是由包含在每个
中的全局函数库创建的page@Abhinav,CLR删除连接的速度有多快?我将尝试在几个测试页面的末尾添加一个
dispose()
,以评估效果。谢谢Jason。你的评论支持我的想法。