Garbage collector and circular reference

Solution 1:

The .Net garbage collector can absolutely handle circular references. The very high level view of how the garbage collector works is ...

  • Start with locals, statics and GC pinned objects. None of these can be collected
  • Mark every object which can be reached by traversing the children of these objects
  • Collect every object which is not marked.

This allows for circular references to be collected just fine. So long as none of them are reachable from an object known to be uncollectable then the circular reference is essentially irrelevant.

Note: I realize I've left out many fun details in order to keep this answer simple and direct

Solution 2:

No, This won't be a problem because GC can handle Circular References

MSDN Says

If a group of objects contain references to each other, but none of these object are referenced directly or indirectly from stack or shared variables, then garbage collection will automatically reclaim the memory.

Solution 3:

Several answers already explained that circular references are not a problem.

As to the weak references - the reason to use them is caching.

When GC walks object dependency trees he ignores weak references. In other words if the only reference to an object is a weak one(s), it will be garbage collected, but if there was no garbage collection between reference creation and your attempt to use, you can still access the object.