【发布时间】:2018-02-23 23:58:45
【问题描述】:
所以,我有这样的课程。 (如果有人问过这个问题,请原谅我,因为它看起来很笼统)
public class Parent{
private Child child1, child2;
void someFunc(){
child1 = new Child ();
child2 = new Child ();
child1.handle += parentHandle;
child2.handle += parentHandle;
}
void parentHandle (Child sender)
{
Console.WriteLine ("Sender is: " + sender.ToString ());
}
}
public class Child{
public OnHandle handle;
delegate void OnHandle(Child sender);
void someChildFunc(){
handle (this);
}
}
父级有一个对子级的引用,子级有一个对父级处理程序的引用。这是循环内存泄漏吗?我应该使用弱引用吗?
【问题讨论】:
-
几乎所有暴露事件的类和处理该事件的类都是这种情况。它不是循环内存泄漏
-
仅供参考
child1.handle += parentHandle;在此示例中您订阅了同一事件两次 -
我打算订阅 child2。谢谢。
-
.NET 垃圾收集器可以很好地处理引用中的循环;重要的是要避免从根引用这些循环,因为这些引用会由于内部的循环性质而使整个事物保持活力。
标签: c# memory-leaks circular-reference