使用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如果沒有,他會自己處理。


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat