2010-09-15 51 views

Trả lời

7

Một lớp thực hiện IDisposable interface chứa một phương thức gọi là Dispose(), nơi bạn có thể giải phóng tài nguyên hoặc làm điều gì đó khác.

Ngoài ra, tuyên bố using có thể giúp gọi tự động Dispose() phương pháp.

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

Điều gì sẽ xảy ra khi bạn gọi myClass.Dispose() tùy thuộc vào nội dung bạn đã viết theo phương pháp Dispose. Ví dụ:

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

vì vậy nếu bạn muốn biết những gì đã xảy ra khi bạn gọi connection.Dispose(), bạn phải có một cái nhìn tại các phương pháp Dispose() của lớp kết nối (có thể đó là một SqlConnection?). Nếu đó là thư viện tích hợp .NET (có nghĩa là bạn không thể lấy mã nguồn dễ dàng), bạn có thể sử dụng công cụ để giúp gọi là Reflector

+0

điều gì thực sự xảy ra khi chúng ta gọi phương thức dispose()? – selvaraj

+0

@Saj xem chỉnh sửa của tôi. –

+0

Cũng giống như bản chỉnh sửa, sử dụng (SqlConnection connection = new SqlConnection (...)) {} dịch thành thử { SqlConnection sqlConnection = new SqlConnection (...); } cuối cùng { sqlConnection.Dispose(); } –

1

Nói chung Vứt bỏ được gọi là tài nguyên miễn phí khi bạn sử dụng xong thành phần.

Phương pháp Vứt bỏ trên đối tượng SqlClientConnection sẽ buộc kết nối đóng lại.

Nó là một phổ biến pattern có thể được tìm thấy không chỉ trong. Net nhưng Java nữa.

MSDN nên cung cấp tất cả các tài liệu bạn cần trên cách chính xác để gọi hàm Dispose

+0

vì vậy nó sẽ loại bỏ các nguồn lực từ bộ nhớ? và những gì về connection.Close() – selvaraj

+0

Các đối tượng sẽ ở lại trong bộ nhớ cho đến khi nó đã được thu gom rác –

+0

để theo câu trả lời của bạn Vứt bỏ được gọi là tài nguyên miễn phí khi bạn kết thúc bằng cách sử dụng các thành phần. những gì bạn có nghĩa là bởi các nguồn tài nguyên miễn phí? – selvaraj

0

conn.Dispose() gọi hàm trong mã không được quản lý.

trong thực tế khi lập trình, bạn không cần gọi hàm này, chỉ cần gọi conn.Close();

9

Phương thức Vứt bỏ() vĩnh viễn loại bỏ bất kỳ tài nguyên ((un) nào được quản lý) khỏi bộ nhớ để dọn dẹp và tài nguyên không còn tồn tại để xử lý thêm.

Ví dụ: -

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(); 
} 
} 
Các vấn đề liên quan