Q. Is there a way to find out if an object has any "strong references" to it?
Raymond Chen hinted that a solution might be possible:
You want to know whether the reference count is zero or nonzero. For that, use WeakReference.
Notes
- i have a "weak reference" to the object (using a WeakReference). If i had a strong reference the answer would immediatly be: "Yes. You have a strong reference to the object."
- the garbage collector exposes no answers
- the IsAlive property can only tell you if an object has been collected, or not. Not if there are strong references to it, or not. (An object with no references can be uncollected - the GC just hasn't gotten around to it yet)
- objects in .NET are not reference counted
- not all objects have to implmenet the IDisposable interface
- not all objects are mine
Code Sample
This code sample demonstrates the problems with relying on forcing a garbage collection and the WeakReference's IsAlive
property to determine if an object has any outstanding references to it.
WeakReference m_wr = null;
...
for (int i = 0; i < 1000000; i++)
{
Pig p = new Pig();
m_wr = new WeakReference(p);
}
...
GC.Collect();
if (m_wr.IsAlive)
Environment.FailFast("All objects should have been collected by now");