使用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,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |