C#語言中的Using語句塊確保資源被釋放
阿新 • • 發佈:2019-01-03
在開發C#的過程中,.NET在物件不再引用之後,清理它們的方法是使用非析構方式。
在C++中,物件只要使用完畢,就會自動呼叫其解構函式。這對於基於資源的類的設計人員是非常好的訊息,因為如果使用者忘記關閉資源,則最好使用解構函式。只要物件使用完畢,就會呼叫C++解構函式。所以,例如,如果出現了異常,但沒有捕獲,有解構函式的物件就會呼叫它們的解構函式。
在C#和其它託管語言中,沒有自動的、決定性的析構的概念,面是有一個垃圾回收器,它會在未來的某個時刻釋放資源。它是非決定性的,國為我們不能確定這個過程在什麼時候發生。如,忘記關閉資料庫連線可能會導致.NET可執行程式的各種問題。幸運的是,我們還有解決辦法。下面的程式碼說明了如何使用
String connectionstring=”server=(local);integrated security=SSPI;database=Northwind”;
Using(SqlConnection conn=new SqlConnection(connectionstring))
{
//開啟連線
Conn.Open;
//執行某些程式碼
}
在這個例項中,無論塊是,using語句塊都會確保關閉資料庫連線。
檢視連線類的Dispose()方法的IL程式碼,它們都檢查連線物件的當前狀態,如果其狀態為開啟,就呼叫
在程式設計時,無論在哪裡獲得資源,最好都使用using()語句塊,因為儘管我們都打算編寫釋放資源的語句,但有時會忘記,並且出現異常時using子句就會發揮作用。