2010-09-15 115 views

回答

7

的所有文件一個類實現IDisposable interface包含一個名爲Dispose()方法,在這裏你可以釋放資源,或做其他事。

此外,using聲明可以幫助自動調用Dispose()方法。

using (SqlConnection connection = new SqlConnection(connStr)) 
{ 
    //do something 
}// it will automatically Dispose() here 

,當你調用myClass.Dispose()取決於你在Dispose方法寫了,會發生什麼。例如:

public class MyClass : IDisposable 
{ 
    //since MyClass implements IDisposable, it must contain a Dispose() method otherwise will compile error 
    public void Dispose() 
    { 
     // do something 
    } 
} 

,所以如果你想知道當你調用connection.Dispose()發生了什麼事,你必須看看類連接的Dispose()方法(也許這是一個SqlConnection?)。如果它是一個.NET內置函數庫(這意味着您無法輕鬆獲取源代碼),您可以使用一個工具來幫助調用

+0

當我們調用dispose()方法時實際發生了什麼? – selvaraj 2010-09-15 06:26:39

+0

@Saj見我的編輯。 – 2010-09-15 06:28:08

+0

正如編輯 使用(SqlConnection connection = new SqlConnection(...)){}轉換爲 嘗試SqlConnection sqlConnection = new SqlConnection(...); } finally { sqlConnection.Dispose(); } – 2010-09-15 06:38:43

1

通常在您完成組件使用後,將調用Dispose來釋放資源。

SqlClientConnection對象上的Dispose方法將強制連接關閉。

這是一個常見的pattern,不僅可以在.Net,但也可以找到Java。

MSDN應提供你所需要的正確的方式來調用Dispose

+0

所以將它從內存中刪除的資源?以及connection.Close() – selvaraj 2010-09-15 06:28:41

+0

對象將保留在內存中,直到它被垃圾收集爲止 – 2010-09-15 06:39:13

+0

因此根據您的答案當您完成使用組件時Dispose被調用以釋放資源。你的意思是免費資源? – selvaraj 2010-09-15 06:47:40

0

conn.Dispose()調用非管理代碼中的函數。其實在編程時,你不需要調用這個函數,只需調用conn.Close()方法即可。

9

Dispose()方法從內存中永久刪除任何資源((未)管理)進行清理,並且資源不再存在以供進一步處理。

例子: -

void DataTest() 
{ 
using(SqlConnection conn1 = new SqlConnection(...)) { 
    conn1.Open(); 
    SqlCommand mycommand = new SqlCommand("Select * From someTable", conn1); 
    using(SqlDataReader myreader = mycommand.ExecuteReader()) { 
    if(myreader != null) 
    while(myreader.Read()) 
    Console.WriteLine(myreader.GetValue(0).ToString() + ":" + myreader.GetTypeName(0)); 

    } 
    mycommand.Dispose(); 
} 
}