[英]Avoiding WeakEventManager and memory leaks on short lived viewmodels
[英]Avoiding memory leaks with events
class Subscriber
{
private Publisher _publisher;
void SomeMethod()
{
_publisher = new Publisher();
_publisher.SomeEvent += HandleEvent;
}
void HandleEvent(object sender, EventArgs e)
{
}
}
class Publisher
{
public event EventHandler SomeEvent;
void FireEvent()
{
SomeEvent?.Invoke(this, EventArgs.Empty);
}
}
我是否需要分離HandleEvent
從SomeEvent
以避免內存泄漏? 訂閱者的壽命比Publisher長,所以我的理解是,當Publisher被SomeEvent
時,它也將清除SomeEvent
所有事件處理程序,因此不應該有任何引用。 我對嗎?
訂閱者的壽命比發布者長
這意味着你沒事,不需要通過取消訂閱來復雜化。
語句_publisher.SomeEvent += HandleEvent;
從_publisher創建一個(有點隱藏)引用到它的所有者。 這樣可以防止收集訂閱者,但只有當發布者超過它時才會收集訂閱者。
由於_publisher是私有的,因此清理是隱式的。 你不必(不應該)在這里添加IDisposable。 也就是說,不是為了管理事件。
因為你標記了這個WinForms:所有那些事件處理程序(例如Button1_Click)都創建從Control到擁有表單的引用,也不需要在那里進行清理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.