close

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

  1. Using cn As New SqlConnection(NWind)   
  2.     cn.Open()   
  3.     Try    
  4.   
  5.     Catch ex As Exception    
  6.   
  7.     End Try  
  8.     'cn.Close()   
  9. End Using  
  1. Dim Cn As New SqlConnection(NWind)   
  2.  Cn.Open()   
  3. Try    
  4.   
  5. Catch ex As Exception    
  6.   
  7. Finally  
  8.     Cn.Close()   
  9.     Cn.Dispose()   
  10. End Try   
  1. Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load   
  2.     Dim CnSection As ConnectionStringsSection = WebConfigurationManager.GetWebApplicationSection("connectionStrings")   
  3.     NWind = CnSection.ConnectionStrings("NWind").ConnectionString   
  4. End Sub   
  1. Dim NWind As String  
  1. <connectionStrings>  
  2.     <add name="NWind" connectionString="Data Source=localhost;User ID=sa;Password=;Initial Catalog=northwind" providerName="System.Data.SqlClinent"/>  
  3. </connectionStrings>   
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 alen1985 的頭像
    alen1985

    1與0的世界

    alen1985 發表在 痞客邦 留言(0) 人氣()