談C# using的用法與好處
之前的一篇文章中的代碼中有一個(gè)using的用法,剛開(kāi)始查看了一些資料說(shuō)是強(qiáng)制關(guān)閉對(duì)象的一個(gè)命令。今天又查了一些資料,才明白,原來(lái)using指令調(diào)用了一個(gè)方法——Dispose()方法。而Dispose()方法的作用就是釋放所有的使用資源。
例:
public void ExecuteCommand( string connString, string commandString ) { SqlConnection myConnection = new SqlConnection( connString ); SqlCommand mySqlCommand = new SqlCommand( commandString, myConnection ); myConnection.Open(); mySqlCommand.ExecuteNonQuery(); }
這個(gè)例子中的兩個(gè)可處理對(duì)象沒(méi)有被恰當(dāng)?shù)尼尫牛篠qlConnection和SqlCommand。兩個(gè)對(duì)象同時(shí)保存在內(nèi)存里直到析構(gòu)函數(shù)被調(diào)用。
解決這個(gè)問(wèn)題的方法就是在使用完命令和鏈接后就調(diào)用它們的Dispose:
public void ExecuteCommand( string connString, string commandString ) { SqlConnection myConnection = new SqlConnection( connString ); SqlCommand mySqlCommand = new SqlCommand( commandString, myConnection ); myConnection.Open(); mySqlCommand.ExecuteNonQuery(); mySqlCommand.Dispose( ); myConnection.Dispose( ); }
使用using語(yǔ)句也可以很好的實(shí)現(xiàn)此功能,而且代碼很清晰:
public void ExecuteCommand( string connString, string commandString ) { using ( SqlConnection myConnection = new SqlConnection( connString )) { using ( SqlCommand mySqlCommand = new SqlCommand( commandString, myConnection )) { myConnection.Open(); mySqlCommand.ExecuteNonQuery(); } } }
當(dāng)你在一個(gè)函數(shù)內(nèi)使用一個(gè)可處理對(duì)象時(shí),using語(yǔ)句是最簡(jiǎn)單的方法來(lái)保證這個(gè)對(duì)象被恰當(dāng)?shù)奶幚淼?。?dāng)這些對(duì)象被分配時(shí),會(huì)被編譯器放到一個(gè)try/finally塊中。
SqlConnection myConnection = null; // Example Using clause: using ( myConnection = new SqlConnection( connString )) { myConnection.Open(); } // example Try / Catch block: try { myConnection = new SqlConnection( connString ); myConnection.Open(); } finally { myConnection.Dispose( ); }
有時(shí)候使用try/finally塊的時(shí)候會(huì)發(fā)現(xiàn)如果發(fā)生錯(cuò)誤,程序不會(huì)報(bào)錯(cuò)。本人感覺(jué)還是使用using語(yǔ)句比較好。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
關(guān)于C#繼承的簡(jiǎn)單應(yīng)用代碼分析
在本篇文章里小編給大家整理了一篇關(guān)于C#繼承的簡(jiǎn)單應(yīng)用代碼分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-05-05C#并行編程之?dāng)?shù)據(jù)并行Tasks.Parallel類(lèi)
這篇文章介紹了C#并行編程之?dāng)?shù)據(jù)并行Tasks.Parallel類(lèi),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05C#中Backgroundworker與Thread的區(qū)別
本文主要介紹了C#中Backgroundworker與Thread的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06c#分頁(yè)顯示服務(wù)器上指定目錄下的所有圖片示例
這篇文章主要介紹了c#分頁(yè)顯示服務(wù)器上指定目錄下的所有圖片示例,需要的朋友可以參考下2014-05-05Unity實(shí)現(xiàn)鼠標(biāo)雙擊與長(zhǎng)按的檢測(cè)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)鼠標(biāo)雙擊與長(zhǎng)按的檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02C#中的Timer和DispatcherTimer使用實(shí)例
這篇文章主要介紹了C#中的Timer和DispatcherTimer使用實(shí)例,本文分別給出它們的使用代碼實(shí)例,需要的朋友可以參考下2015-01-01