在撰寫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的寫法上有什麼不一樣的方式
首先在Web.Config中,小喵安排了一段SQL ConnectionString
接著宣告了個整體變數用來存放ConnectionString
在PageLoad的時候小喵把該字串取回來
再來就是看看使用Dim 宣告Connection的方式以及使用Using的方式程式碼上有何不同
使用Dim的方式
使用Using的方式
在程式中就算錯誤處理沒有處理好,發生錯誤後沒有把Connection做close,在執行到End Using的時候,也會把該變數自動的做資源回收處理
可以省掉Cn.Cloase與Cn.Dispose
至於有網友問到,Cn.Open是否需要,這就要看你之後會用到了什麼東西,如果您用Cmmd(Command)的ExecuteReader,ExecuteNonQuerry,那麼你必須先執行Cn.Open,如果您透過Da(SqlDataAdapter)來處理,那麼Da會自動判斷是否已經Cn.Open如果沒有,他會自己處理。
- Using cn As New SqlConnection(NWind)
- cn.Open()
- Try
- Catch ex As Exception
- End Try
- 'cn.Close()
- End Using
Using cn As New SqlConnection(NWind) cn.Open() Try Catch ex As Exception End Try 'cn.Close() End Using
- Dim Cn As New SqlConnection(NWind)
- Cn.Open()
- Try
- Catch ex As Exception
- Finally
- Cn.Close()
- Cn.Dispose()
- End Try
Dim Cn As New SqlConnection(NWind) Cn.Open() Try Catch ex As Exception Finally Cn.Close() Cn.Dispose() End Try
- Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
- Dim CnSection As ConnectionStringsSection = WebConfigurationManager.GetWebApplicationSection("connectionStrings")
- NWind = CnSection.ConnectionStrings("NWind").ConnectionString
- End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim CnSection As ConnectionStringsSection = WebConfigurationManager.GetWebApplicationSection("connectionStrings") NWind = CnSection.ConnectionStrings("NWind").ConnectionString End Sub
- Dim NWind As String
Dim NWind As String
- <connectionStrings>
- <add name="NWind" connectionString="Data Source=localhost;User ID=sa;Password=;Initial Catalog=northwind" providerName="System.Data.SqlClinent"/>
- </connectionStrings>
<connectionStrings> <add name="NWind" connectionString="Data Source=localhost;User ID=sa;Password=;Initial Catalog=northwind" providerName="System.Data.SqlClinent"/> </connectionStrings>
留言列表