Comments
Sort by recent activity
Is the IP address 146.254.189.105 assigned to your local machine or a remote machine? ANTS 4 only supports profiling websites hosted on a local machine.
This error will result when you try to profile a website hosted on another machine, as ANTS will start profiling a local instance of IIS and then wait for it to start on the remote machine (which won't ever happen, so it times out). The text of this error is fairly unhelpful, so we're going to look at improving it. / comments
Is the IP address 146.254.189.105 assigned to your local machine or a remote machine? ANTS 4 only supports profiling websites hosted on a local machine.
This error will result when you try to profi...
The 'recycle' icons do indeed indicate a recursive node. When a method is presented in the call graph we include all instances of that method, including recursive calls, so we can display the graph for all of the calls from that location.
In this case, the graph is fairly hard to read - most cases of recursion appear much simpler - but essentially the call you are looking at is called from the second level of recursion, so it appears twice: once as a child of the method you are looking at and once again at the level of recursion it appears at. The 'recycle' icon appears in the recursive path to indicate that you will get some duplicate results by following it.
There was some debate as to whether or not we should just cut down the set of methods to just the 'top-level' methods, though we decided against this as it would make it very hard to find a method call that occurs only after the recursion has reached a deep level: with the current implementation all methods that can be called by the graphed method will be displayed immediately. / comments
The 'recycle' icons do indeed indicate a recursive node. When a method is presented in the call graph we include all instances of that method, including recursive calls, so we can display the graph...
ANTS Profiler stores quite a lot of detail about the running program which does mean we can require a lot of memory in some circumstances. The main culprit is the data for individual stack timings: a .NET program can produce 5-10 million stack traces easily, which requires several hundred Mb to process as things stand. 600Mb is definitely on the high side, but not entirely unexpected for a reasonably complex Windows Forms application.
We do a couple of things to try to reduce the load: we simplify certain kinds of complex stack traces and we try to discard particularly irrelevant results (both these behaviours will be optional in the release version). We're not very aggressive with this, though as it's fairly hard to decide whether or not a particular result is interesting or not.
ANTS will only keep the data it needs in memory, so you will find if you select a time region the memory usage will usually go down. Using the 'only methods with source' profiling method will also reduce the memory requirements substantially. / comments
ANTS Profiler stores quite a lot of detail about the running program which does mean we can require a lot of memory in some circumstances. The main culprit is the data for individual stack timings:...
Hi,
I've taken a look through our source control logs and I think there's only one change that could impact performance. The previous builds would not instrument functions with more than 30,000 lines in them: we've increased the limit to 300,000 lines.
In general this means very large designer-generated files: these also happen to produce a lot of instrumentation so the effect could be quite large in some cases. Could you check to see if you have any of these files?
This could be something we make optional, as quite often the results produced for these functions aren't very enlightening, so being able to disable them in cases where they are dragging performance down could be useful.
You could also check task manager as your application is starting: having something else loading the CPU at the same time can cause quite a substantial difference in times - because profiling is quite CPU-intensive, the effect can be quite marked. / comments
Hi,
I've taken a look through our source control logs and I think there's only one change that could impact performance. The previous builds would not instrument functions with more than 30,000 lin...
We have changed the code in ANTS 4 that deals with working out the amount of overhead the profiler incurs: however in all of the builds we've released so far this feature is turned off, so the reported times always include the time added by the profiling code.
This is probably something that we'll add as an option so you can switch between the times with and without compensation applied - it's a post-processing step in ANTS 4, so we can calculate the results after the fact.
The current implementation does have a few limitations: in particular it only covers overhead added by the method-level profiling and not the line-level code. I'm going to look at improving this but there are some technical issues that make this a hard problem - the two big ones being that the instrumentation alters the behaviour of the JIT (and we can't compensate for that), and that the line-level timing code is now so short that the overhead it applies is highly dependent on the surrounding code, a result of modern processor architectures.
There are a couple of other effects the profiler will have that we probably won't be able to compensate for: in particular because more code is being executed and more memory is being accessed, more cache misses will occur which will cause the program to run slower. I don't think we've seen anything in our tests so far for which this is hugely significant, though. / comments
We have changed the code in ANTS 4 that deals with working out the amount of overhead the profiler incurs: however in all of the builds we've released so far this feature is turned off, so the repo...
I think from looking at the video that you might be seeing a synchronisation issue with the timeline: the results are probably there but the profiler thinks they happened at a different time to the processor spike on the graph.
The profiler works internally in CPU clock ticks, which it synchronises periodically against the system clock: if an error occurs with this process you can see results like we can see in the video.
There's actually a good way to check to see if this has happened: switch to viewing times in milliseconds and look at the All Methods view, sorting the methods by the time with children column. If the profiler has encountered a clock synchronisation issue, the lengths of the bars won't match up to the number of milliseconds taken by the methods (the bars' lengths are percentages in terms of CPU cycles rather than real-time). / comments
I think from looking at the video that you might be seeing a synchronisation issue with the timeline: the results are probably there but the profiler thinks they happened at a different time to the...
dineshasanka wrote:
just to add to the above topic,
if i want to select new tables only, there is no easy way of doing it.
You can do this, but the interface doesn't make it as easy as it could be:
* Bring up the filter pane and use the right-click menu to deselect all of the SQL Server 2000 and 2005 object types.
* Reselect the 'table' object type
* In the grid, use the difference type grouping mode and click the 'All' button for the group of new tables. (You must have at least one new table present as an example in order to do this)
This will give you a SQL Compare project that will only synchronise the new tables in your database. You can add new object types using the filter panel.
It is actually also possible to do more complicated things like select only new tables and views that need to be deleted using a combination of the object type and difference type grouping modes but it's very tricky to get it right. This certainly seems like an area in which the interface can be enhanced. / comments
dineshasanka wrote:
just to add to the above topic,
if i want to select new tables only, there is no easy way of doing it.
You can do this, but the interface doesn't make it as easy as it coul...
There are two variables that control where ANTS puts its data: RGTEMP and RGIISTEMP. RGIISTEMP only applies to IIS sessions, and RGTEMP applies to everything.
We don't use the standard temporary directories as this wouldn't work for a lot of profiling scenarios where the target process is running as a different user to the profiler UI. Note that if you do set the temporary directories yourself, you will also have to manually set the permissions for profiling these kinds of application (Windows services and IIS in particular) / comments
There are two variables that control where ANTS puts its data: RGTEMP and RGIISTEMP. RGIISTEMP only applies to IIS sessions, and RGTEMP applies to everything.
We don't use the standard temporary di...
Another new feature of the later versions is a sampling profiler - in this mode the overhead of the profiler is low enough that it can be considered to be effectively nonexistent in most cases.
In the instrumentation modes, which capture the most detail, there's effectively no way to turn the profiler on or off: once the JIT has done its work, the instrumentation is in place and can't be changed. Additionally, the profiler would still need to track program state even when it was not measuring timings, which means the main effect of having an 'on/off' switch would be to make the profiler run slower (with the switch in either state). The best way to improve performance is to turn down the amount of instrumentation that is performed - in particular, line-level timings can require a lot of processor time to deal with.
Most profilers have an on/off switch in any case to make it possible to limit the final results to a specific time period. ANTS doesn't need this because it has the timeline and the ability to return profiler results for any time period by dragging out a region, so it's possible to just ignore the results from uninteresting times and easy to look at many different areas of the program in a single run.
This is particularly aimed at applications with long setup times: it means that it's not possible to make a mistake that would result in the interesting part of the data being lost, and also makes it easy to take a peek at the early data to ensure that the profiler is indeed capturing what's required. / comments
Another new feature of the later versions is a sampling profiler - in this mode the overhead of the profiler is low enough that it can be considered to be effectively nonexistent in most cases.
In ...
The HRESULT is the interesting part: 0x8007007E means 'the specified module could not be found'. This implies that either the profiler core is not registered correctly, or one of its dependencies is missing.
The profiler UI checks the registration before trying to launch any application, so it's more likely that there is a missing dependency. Unfortunately, the error message provides no hint as to what this could be.
You can manually reregister it by running regsvr32 on the ProfilerCore dll contained within the ANTS distribution (you'll need to do both the version in the main directory and the one in the x64 directory if you're running 64-bit Windows). I suspect this will probably fail with the same HRESULT, though.
The profiler depends on the VC2010 runtime, the detoured dll (shipped with the profiler), mscoree.dll (ie, .NET), psapi.dll and ws2_2.dll (aka winsock). The DLLs are all part of the standard Windows distribution and should be found in your system32 directory. The VC2010 runtime should be installed by the ANTS installer if it's not already present, but you can install it manually from here: http://www.microsoft.com/download/en/de ... px?id=5555 http://www.microsoft.com/download/en/de ... x?id=14632
Note that v5 of ANTS was built with Visual Studio 2008SP1, so you'll need a different version of the runtime installed for that version. / comments
The HRESULT is the interesting part: 0x8007007E means 'the specified module could not be found'. This implies that either the profiler core is not registered correctly, or one of its dependencies i...