我有一个父对象,它具有对子对象的引用,另外父对象有一个事件处理程序,用于侦听子对象的事件.
如果将释放对父对象的所有引用,那么通过GC释放通过父对象和子对象使用的内存吗?(假设不再存在对孩子和父母的引用).
class ParentClass {
ChildClass _childClass;
public ParentClass(ChildClass childClass) {
_childClass = childClass;
childClass.SomeEvent += ChildClass_SomeEvent;
}
void ChildClass_SomeEvent(object sender, SomeEventArgs e) {
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我知道GC不会立即做出反应.我的问题不是在释放父对象后是否立即释放内存.我的问题是,如果内存被释放无论如何.
更新
对我来说似乎答案是肯定的,GC能够解决这个循环引用.但对于阅读此帖并且有类似问题的所有人,请注意不要让事件注册开放.这只是一个特殊的例子,注册没有问题.在其他情况下,事件注册可能会导致严重的内存泄漏.
vilx提供了一个涵盖这个问题的非常好的资源:http: //www.interact-sw.co.uk/iangblog/2004/07/07/circulareventrefs
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |