C# Using的一個比較好的語言文字解釋
阿新 • • 發佈:2018-12-26
應用 超出 周期 情況下 net 語句 結果 沒有 dispose
其實很早就開始使用using了.但是對這個語法糖我自己一直沒有總結也沒有一個很好的文字描述解釋.今天看其他的博文的時候發現有人對其做了簡單的解釋我覺得很好,很適合一種講解.於是抄錄下來
using (var context = new EF6RecipesContext())
{
...
}
如果你不熟悉這種模式,也沒關系,因為它很簡單。一般情況下,我們通過new操作符並將結果賦值給變量來得到一個對象的實例,當這個變量超出其生命周期,該對象不再被別的任何對象引用。垃圾回收器會在某一個時間點開始釋放該對象所占的內存工作。 對於我們.NET應用程序中的大多數對象來說,這是一個巨大的工作,因為他們會一直占用著資源,直到垃圾回收器開始工作。而垃圾回收器具有不確定性,因為他總是按自己的計劃來完成其工作,對此我能施加的影響很有限。DbContext上下文對象的實例占用著像數據庫連接這樣的,我們希望不使用時就立即釋放的系統資源。我們真的不希望數據庫連接的釋放工作要等到垃圾回收器來完成。
using()語句有很好的特性。首先,當代碼執行完using(){}代碼塊時,上下文中的Dispose()方法會被自動調用。因為DbContext上下文實現了IDisposable接口,該方法將關閉所有數據庫連接,清理任何需要被釋放的資源。
其次,不管怎樣,只要代碼離開using(){}代碼塊,方法Dispose()就會被調用。最重要的是,代碼塊裏即使遇到return語句或者是拋出了異常,它都能保證資源得到合理的釋放。
C# Using的一個比較好的語言文字解釋