Bất kể bạn đang hỏi gì, câu trả lời kỹ thuật cho câu hỏi của bạn là "không". Về mặt kỹ thuật, trừ khi bạn phát hiện ra một lỗi trong CLR, không có "rò rỉ bộ nhớ" thực sự với các đối tượng được quản lý (đó là một phần lớn của những gì làm cho chúng trở thành một điều tốt). Tuy nhiên, để trả lời những gì tôi nghĩ bạn đang thực sự hỏi, có vẻ như bạn đang hỏi một trong hai điều sau:
- Có điều gì cần được thực hiện với các sự kiện không có bất kỳ đại biểu nào gắn với họ không ?
- Sự kiện có thể ngăn không cho các đối tượng bị dọn dẹp bởi bộ thu gom rác không?
Câu trả lời cho câu hỏi đầu tiên đơn giản là "không". Di chuyển dọc, không có gì để xem ở đây.
Câu trả lời cho câu hỏi thứ hai đã được thảo luận tại đây trên SO và các khu vực khác của web. Phiên bản ngắn gọn là một trình xử lý sự kiện đính kèm có nghĩa là GC sẽ xem xét cá thể đích là "có thể truy cập" bằng cá thể bắn sự kiện. Điều này có thể khiến đối tượng ở lại trong bộ nhớ lâu hơn dự kiến, vì khả năng hiển thị này có phần minh bạch đối với người dùng (nhà phát triển) do cách các đại biểu được xây dựng.
Nói cách khác, nói rằng tôi có hai đối tượng: Nhà sản xuất và người tiêu dùng. Nhà sản xuất bắn một sự kiện mà Người tiêu dùng ... tiêu thụ.
public class Producer
{
public event EventHandler OmgIDidSomething;
}
public class Consumer
{
public void AttachTo(Producer producer)
{
producer.OmgIDidSomething += new EventHandler(producer_OmgIDidSomething);
}
private void producer_OmgIDidSomething(object sender, EventArgs e)
{
// ...
}
}
Trong ví dụ này, bất kỳ trường hợp Consumer
nơi AttachTo
được gọi sẽ vẫn có thể truy cập như xa như GC là có liên quan đến trường hợp của Producer
rằng nó gắn liền với hội đủ điều kiện cho việc thu thập, bởi vì các đại biểu đằng sau việc thực hiện sự kiện OmgIDidSomething
có tham chiếu đến phiên bản Consumer
mà nó tương ứng với.
Nguồn
2010-09-07 18:31:38
Bạn đang hỏi gì? – SLaks
Bạn có nghĩa là một sự kiện không bị bỏ quên? – Bobby
Bạn có hỏi về sự kiện/đại biểu có danh sách yêu cầu trống không? – Oded