我有一个使用WeakReferences存储Action<T>
的事件聚合器。我遇到的问题是我的行为不断收集垃圾。
以下将失败......
public Foo(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe<BarEvent>(DoNothing)
}
public void DoNothing(BarEvent aEvent) {}
然而以下将会成功......
private Action<BarEvent> _action;
public Foo(IEventAggregator eventAggregator)
{
_action = DoNothing;
eventAggregator.Subscribe<BarEvent>(_action);
}
public void DoNothing(BarEvent aEvent) {}
显然_action变量有助于让事情保持活力,但我对于为什么有点困惑......更重要的是有没有办法让行动在没有参考的情况下保持活着?
答案 0 :(得分:0)
我认为你不会得到一个有效的“答案”,因为你正在处理有关垃圾收集器如何在你的计算机上运行的未记录内部,因为它恰好现在正在配置。
更改垃圾收集器:
LatencyMode
gcConcurrent
)gcServer
)你可以期待不同的行为。
这使我回答你的问题:我不知道。
答案 1 :(得分:0)
Action何时收集垃圾?
当垃圾收集器感觉像它时。
WeakReference
类被描述为:
表示一个弱引用,它引用一个对象,同时仍然允许通过垃圾回收来回收该对象。
换句话说,你明确表示你不介意收集对象。你不能把蛋糕和吃掉。要么采取强有力的参考,要么准备重新创建对象,以防它被收集。