How to find instance from object retention graph?

Memory profiling for .NET developers

Moderators: StephenC, Alex.Davies, AndrewH, melvyn.harbour

How to find instance from object retention graph?

Postby ScottLangham » Fri Oct 23, 2009 5:38 pm

In the instance list I've found an instance that I was expecting should have been cleaned up.

So, I looked at the object retention graph for this instance. There's an interesting instance in the list of instances that reference the leaked object. I'd like to look at the properties of this instance. So, I clicked on the interesting instance to select it on the graph, and then I switched back to the instance list.

I'm expecting the instance I selected on the graph to be selected in the instance list so that I can look at it's properties in the hopes of identifying it from the properties, but it's not selected. There are hundreds of instances in the list.

How, from an Object Retention Graph do I view the properties of a particular instance I've found on the graph?
ScottLangham
 
Posts: 5
Joined: Fri Oct 23, 2009 3:54 pm

Postby Alex.Davies » Sun Oct 25, 2009 9:12 pm

One way to do it is to right click the object and choose "Show Object Retention Graph for this object". That'll make the "current" object the one you've chosen, so if you then go to the instance list, it'll be selected.

Hope that helps,
Alex
Developer,
Red Gate .NET Tools
Alex.Davies
 
Posts: 335
Joined: Tue Dec 02, 2008 12:23 pm
Location: Cambridge, uk

Postby ScottLangham » Wed Oct 28, 2009 12:00 pm

Hi Alex.

What you described is what I thought should happen too, but it doesn't.

In visual studio created a C# Windows Application and changed Form1.cs to this:

namespace WindowsApplication1
{
class A
{
public A(string n)
{
name = n;
}

string name;
public B b;
};

class B
{
};


public partial class Form1 : Form
{
A a1 = new A("a1");
A a2 = new A("a2");
A a3 = new A("a3");
A a4 = new A("a4");
A a5 = new A("a5");

public Form1()
{
InitializeComponent();

a3.b = new B();
}
}
}


Then followed these steps:
* Run this app with the memory profiler
* Capture a snapshot
* Go to the class view
* Select the 'B' class and go to the instance view
* There should only be one instance, select it and go to the object retention graph
* There is an A object referencing the B instance. Select the A object, right click and choose ' Show object retention graph for this A'.
* Now, press on the 'Instance List' button to switch back to that view.

=> No row seems to be selected. The top row has the '+' icon to the left of the class name. I don't think that means that row is selected though. If I press on the + to see the properties of that instance, it says it's name is "a1".
=> The instance that should be referencing the B instance should have "a3" as its name. I don't appear to be able to find this information from ANTS memory profiler.

Any further help would be appreciated.

-Regards,
Scott
ScottLangham
 
Posts: 5
Joined: Fri Oct 23, 2009 3:54 pm

Postby Alex.Davies » Wed Oct 28, 2009 12:07 pm

I understand. I've tried to follow my own instructions, but as you say, they didn't work. I'm afraid there is no way to find the details about an instance from the object retention graph in this version. I'll add it as a request for the next version.

Thanks,
Alex
Developer,
Red Gate .NET Tools
Alex.Davies
 
Posts: 335
Joined: Tue Dec 02, 2008 12:23 pm
Location: Cambridge, uk

Postby ScottLangham » Thu Oct 29, 2009 1:39 pm

Ok. Great, it would be a useful feature. Thanks.
ScottLangham
 
Posts: 5
Joined: Fri Oct 23, 2009 3:54 pm

Postby Alex.Davies » Thu Dec 10, 2009 6:52 pm

I've just tried this again to help another customer, and it seems to work in some situations. I'm baffled now.
Alex
Developer,
Red Gate .NET Tools
Alex.Davies
 
Posts: 335
Joined: Tue Dec 02, 2008 12:23 pm
Location: Cambridge, uk


Return to ANTS Memory Profiler Previous Versions

Who is online

Users browsing this forum: No registered users and 0 guests

cron