you have sort of answered some of your own questions with points 1 & 2.
When nothing initially appears in the Object Retention Graph except the object for which the graph was created for it's because Finalizer queue GC roots are keeping the object in memory and we hide these to begin with as they generally add lots of noise to the Object Retention Graph.
The Finalizer queue objects should be removed when the next full Garbage Collection happens (i.e. when the next snapshot is taken) and the central object for which the graph was created will most likely be GC'd.
- Anything which is grey has had Dispose called on it.
- The black object is simply the object that you have created the graph for. Whether it has also had Dispose called - if you applied the Dispose filter from the panel and the object was still in the instance list and you created a graph from that object then it has had Dispose called.
- Just because an object implements IDisposable doesn't mean that Dispose has ever actually been called. We do show objects that implement IDisposable and have been disposed - those are the grey objects mentioned above. We don't indicate objects on the graph that implement IDisposable but haven't had Dispose actually called yet.
I think that the ThreadMethodEntry class is a particular implementation of IAsyncResult. You would typically create instances of this class when invoking asynchronous operations.
I don't have any articles on the Finalizer queue but you might find this article helpful in understanding .NET memory management:
http://www.simple-talk.com/dotnet/.net- ... n-in-.net/