2009-08-10 31 views
-1

當我使用什麼優勢利用,我看到人們編碼這樣ASP.NET:如果創建ASP.NET中的對象

using (SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString)) 
{ 

    // Do the datatbase transactions 

} 

它是如何從這個

SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString) 
// Do the datatbase transactions 

不同是否有任何性能/速度方面的改進?

回答

2

這只是一個快捷方式的快捷方式。 :)

using (var foo = new Foo()) 
    foo.bar(); 

等於:使用關鍵字確保對象將被設置

Foo foo = new Foo(); 
try 
    { 
     foo.bar(); 
    } 
    finally 
    { 
    if (foo != null) 
     ((IDisposable)foo).Dispose(); 
    } 

(它必須實現IDisposable)。
使用外部資源(數據庫連接,文件流等)時很有用 - 即使可能發生錯誤,它們也會被釋放。

3

using語句允許 程序員來指定使用資源的對象 應該釋放 他們。提供給使用 語句的對象必須實現 IDisposable接口。此接口 提供Dispose方法,其中 應釋放對象的資源。

A,使用語句可以退出任一 當使用語句的末尾是 達到或如果一個異常被拋出 和控制離開語句塊 語句結束之前。

一篇好文章可以在這裏

Understanding the 'using' statement in C#

0

一般發現,你應該使用using語法實現IDisposable任何物體 - 例如,SqlConnection

using語句確保在幾乎所有情況下(即使發生異常)都可以在塊末尾正確放置對象。

這兩種方法都沒有直接的速度/性能差異,但如果您不處理您的IDisposable對象(通常使用using),那麼您可能會遇到問題,因爲重要資源尚未整理向上。

使用using是很好的做法,幾乎總是正確的做事方式。 不是使用using通常是一個壞主意,除非你完全確定你在做什麼以及爲什麼。

1

使用:定義一個範圍,在該範圍之外將放置一個或多個對象。

因此,它只是語法,而不是創建對象然後處置它。在MSDN

-1

using語句

更多細節將自動最後調用,即一旦使用塊結束後,將處理過的對象。

using (SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString)) 
{ 
    // Do the datatbase transactions 
} 

等效於:在使用構建體創建

SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString) 
// Do the datatbase transactions 
    myConnection.Close(); 
    myConnection.Dispose() 
+1

還嘗試/最後拋出,以確保無論發生什麼情況,都會調用Close和Dispose。 – 2009-08-10 10:00:44

+0

關閉也不會被調用。 – meandmycode 2009-08-10 12:37:57

0

對象具有構建體內壽命(括號{})。如果您注意到只有那些實現IDisposable接口的成員才能創建。它只是意味着在使用構造代碼之後,編譯器會自動在您創建的對象上調用dispose方法。它有助於垃圾收集。

與SqlConnection對象的情況一樣,我們必須調用dispose,否則ado.net連接池(管理與數據庫的連接)將爲另一個傳入請求分配新連接,而不是重新使用舊連接池。連接池只是一種固有的方式,可以最大限度地減少獲取數據庫連接所需的時間。

參見: 連接使用語句池 IDisposable的

0

try 
{ 
    /* do the work here with obj */ 

} 
finally 
{ 
    if (obj != null) 
     obj.Dispose(); 
}