使用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/
|
topcat |
原文:大专栏 使用Using来声明Connection来Connection自动关闭回收,避免忘记回收关闭
以上是关于使用Using来声明Connection来Connection自动关闭回收,避免忘记回收关闭的主要内容,如果未能解决你的问题,请参考以下文章