GC会释放使用的内存吗?

HCL*_*HCL 9 .net c#

我有一个父对象,它具有对子对象的引用,另外父对象有一个事件处理程序,用于侦听子对象的事件.

如果将释放对父对象的所有引用,那么通过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

Jar*_*dek 9

是..NET GC处理循环引用没有问题(假设您没有使用非托管资源,或者如果您这样做,则实现IDisposable).