How can we help you today? How can we help you today?
Andrew H
The profiler performs a single full garbage collection while taking a snapshot. It's invoked via a different .NET API but shouldn't have an effect that's any different from GC.Collect(). There are a few things that can cause .NET memory usage to appear not to change after a garbage collection: * The # bytes in all heaps counter is often not accurate as it's only updated after a garbage collection, and there are times when .NET allocates more memory without causing a GC (and rare times when it releases memory outside of a GC). The private bytes counter is updated in real time. * Fragmentation of the large object heap can prevent .NET from releasing memory back to the system. You can see free space in .NET heaps in the memory profiler, as well as the largest free contiguous block: if there is a lot of free space but the largest contiguous block is small then fragmentation is occurring. * Objects referenced by objects with finalizers require at least 2 garbage collection cycles to be removed from memory, and possibly more if these references themselves have finalizers. * .NET can maintain a pool of free memory for future object allocations if it thinks that there will be a lot of them (this allows it to postpone future garbage collections). It might decide to release this back to the system if there is another GC and not much of the free memory is used. This is often beneficial for the performance of server style applications. / comments
The profiler performs a single full garbage collection while taking a snapshot. It's invoked via a different .NET API but shouldn't have an effect that's any different from GC.Collect(). There are ...
0 votes
We do only show the shortest paths in the object reference graph at the moment: we're planning to look at new ways of exploring the graph in future versions. However, the roots that we do show are only the strong roots for an object: weak roots (and hence weak references) are deliberately excluded from the graph, as there are usually too many of these in WinForms or WPF applications for the graph to make any sense. You can use the class reference graph to explore the full relationships between objects, and switch to the object list or graph when you find something interesting there. The filters can be useful for narrowing down cases where there are a lot of similar objects. For a UI library like WPF you typically find that everything eventually references everything else in some way - it's for this reason that we prefer to use the shortest path, as when there's a loop of references, the objects nearer to a root are typically nearer to the 'start' of the loop as seen from the point of view of the program. The object graph highlights any objects that make a loop in a blue box - any objects so highlighted have a path linking them in both directions - typically through parent/child fields but sometimes via more complicated paths. / comments
We do only show the shortest paths in the object reference graph at the moment: we're planning to look at new ways of exploring the graph in future versions. However, the roots that we do show are ...
0 votes
The intended behaviour hasn't really changed between the two versions, but ANTS 4 is very much faster than ANTS 3 and we took advantage of that to capture much more detail about the application being profiled. The Time measurement is intended to be the time spent exclusively in a certain method, excluding any methods that it calls (framework or otherwise). However, ANTS 3 did not measure the time spent in methods without source by default, so these would be measured as part of the method that made the call: this made the Time measurement inaccurate in the older version of the profiler. Time with children is the actual overall amount of time spent running a method. It's the best indication of which methods 'feel slow'. You may want to play with the CPU/wallclock time setting depending on what your application is doing to get the best view of the results. ANTS 3 didn't have this option and always showed wallclock time. ANTS 4 does have a similar feature, you can set it to profile only methods with source, and it will show timings in the same way as before if you choose this option. However, as there is much less detail, there will be no indication of why a particular method is slower, and ANTS 4 doesn't have line-level timing support in this mode. We've added a much better way of exploring how functions relate to each other, though, in the form of the call graph. If you've found that the Select method is taking a lot of time, but want to relate it to your code, you can click the call graph icon next to the call and expand it upwards to find your methods: if it's called from many different places, you will see all of them drawn out as a tree and how much time each of your methods is spending in the Select call. / comments
The intended behaviour hasn't really changed between the two versions, but ANTS 4 is very much faster than ANTS 3 and we took advantage of that to capture much more detail about the application bei...
0 votes