使用Using来声明Connection来Connection自动关闭回收,避免忘记回收关闭

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Using来声明Connection来Connection自动关闭回收,避免忘记回收关闭相关的知识,希望对你有一定的参考价值。

使用Using来声明Connection来Connection自动关闭回收,避免忘记回收关闭


在撰写Connection的时后,如果Conn在Open后如果没有Close的话,就会造成Connection一直连着直到GC起来才能够把资源释放

这样的现象只要在错误处理上没有处理好,很容易就会造成这样的结果,而这样的结果并不会造成Web Server的负担,有负担的是后端的SQL Server

这样会产生一个有趣的现象,当Web Server与SQL Server不同主机的时候,因为在Web Server上撰写程序没有控制好,造成SQL Server的资源消耗....可是由于Web Server本身并不会有感觉(损耗的是SQL Server),所以Web Server不会因为资源不足启动GC来回收资源→造成SQL的资源浪费又无法有效回收

而要避免这样的情形发生,.NET Framework 2.0提供了一个新的方式,就是使用Using来声明变量,那么在程序执行到End Using的时候就会自动的把该变量做资源回收

以下来看看使用Dim与使用Using的写法上有什么不一样的方式

使用Dim的方式声明

Dim ConnStr As String = getConnStr()
Dim Conn As New SqlConnection(ConnStr)
Try

Catch ex As Exception
	‘错误处理
Finally
	‘关闭回收
	Conn.Close()
	Conn.Dispose()
End Try

使用Using声明

Dim ConnStr As String = getConnStr()
Try
	Using Conn As New SqlConnection(ConnStr)

	End Using
Catch ex As Exception
	‘错误处理
End Try

在程序中就算错误处理没有处理好,发生错误后没有把Connection做close,在执行到End Using的时候,也会把该变量自动的做资源回收处理
可以省掉Conn.Cloase与Conn.Dispose

至于有网友问到,Conn.Open是否需要,这就要看你之后会用到了什么东西,如果您用Cmmd(Command)的ExecuteReader,ExecuteNonQuerry,那么你必须先执行Conn.Open,如果您透过Da(SqlDataAdapter)来处理,那么Da会自动判断是否已经Conn.Open如果没有,他会自己处理。


以下是签名:

  • 欢迎转贴本站的文章,不过请在贴文主旨上加上【转贴】,并在文章中附上本篇的超链接与站名【topcat姗舞之间的极度凝聚】,感恩大家的配合。
  • 小喵大部分的文章会以小喵熟悉的语言VB.NET撰写,如果您需要C#的Code,也许您可以试着用线上的工具进行转换,这里提供几个参考
    • http://converter.telerik.com/
    • http://www.carlosag.net/tools/codetranslator/
    • http://www.developerfusion.com/tools/convert/vb-to-csharp/

技术图片
Visual Studio and Development Technologies
(2005~Now)

技术图片

topcat
Blog:http://www.dotblogs.com.tw/topcat


原文:大专栏  使用Using来声明Connection来Connection自动关闭回收,避免忘记回收关闭


以上是关于使用Using来声明Connection来Connection自动关闭回收,避免忘记回收关闭的主要内容,如果未能解决你的问题,请参考以下文章

c# using的疑问

高分请教conn.asp连接设置

关于limit_req和limit_conn的区别

sql参数化查询

C++ 在派生类中使用using声明改变基类成员的可访问性

使用SqlCommand 执行SQL语句