How can we help you today? How can we help you today?
Andrew H
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 ...
0 votes
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...
0 votes
It's in the nature of profiling on modern CPUs that the more instrumentation you add, the harder it is to work out how the program would have behaved without the profiler. ANTS has to compromise and instead tries to ensure that the relationship between method times remains constant. Turning down the detail level using the startup dialog will reduce the amount of instrumentation and improves ANTS estimation of the performance of the application. With multithreaded applications, you should probably consider using sampling mode wherever possible to get the best impression of how the application is performing (with instrumentation, the profiler may cause threads to be synchronised when under heavy load where they would not normally get synchronised) It's also worth noting that ANTS counts CPU ticks and not real-time performance (except in sampling mode). This does provide a better representation of the work that an application must do, but technologies like SpeedStep and TurboBoost mean that any given clock tick can take a very variable amount of time. ANTS works out the clock speed at any given point in time and uses this to get the real time values, but because the CPU is varying in speed this doesn't necessarily correspond very well to the amount of work the application is actually doing at any given point. Finally, with multi-threaded applications the amount of 'time' spent in total is multiplied by the number of threads (or the number of running threads if you choose CPU time). This is particularly noticeable when using wallclock time (where having 3 threads for 3 minutes will give you 9 minutes of time in the call tree), but will also happen with CPU time. We do this because dividing the time between the threads doesn't actually make sense - especially with multicore systems where you really can do 9 minutes of work in 3 minutes of time. The timeline can be used to untangle this: when you select a method it will show a bar showing exactly when it was running: for a method that's running in parallel this will be shorter than the amount of time shown in the call tree. You can also select an individual thread using the drop-down to eliminate extra time caused by parallelism. / comments
It's in the nature of profiling on modern CPUs that the more instrumentation you add, the harder it is to work out how the program would have behaved without the profiler. ANTS has to compromise an...
0 votes
There's a bug somewhere in the UI logic that leaves the 'summarizing' screen up when the target process has stopped before .NET has started. It's supposed to display a message to the effect that there are no results available instead (which is still kind of unhelpful, but unfortunately it's all that the profiler can really see happening). With an ASP.NET application, ANTS monitors an instance of Internet Explorer, and stops profiling once it goes away. Sometimes IE farms off the request from ANTS to another instance of itself and quits immediately, which looks to ANTS the same as if you had closed the window. I think from your description that this is most likely what's happening (if this is what's happening, then the 'summarizing results' spinny will show up around the same time the browser opens). If the 'stop profiling' button is grayed out when the browser is open, then this is almost certainly what's happened: it's only lit while the profiler thinks that the target process is running. One thing to look for is whether or not protected mode is on when the browser opens. ANTS *should* be creating a browser that is running with protected mode turned off. If protected mode is on, then one thing that might fix the issue is manually turning it off in IE's settings. Which version of IE are you running? IE7 has protected mode but doesn't have a way to start with it turned off (the feature was added in IE8), and might be a source of these issues. Something else that might be worth trying is profiling the C:\Program Files\Internet Explorer\iexplore.exe process using the desktop application profiling mode. The profiler shouldn't display the spinner until after IE exits: if it shows up right away then there's something odd going on (the spinner won't disappear due to the UI bug, at least, unless you load a page with Silverlight on it). / comments
There's a bug somewhere in the UI logic that leaves the 'summarizing' screen up when the target process has stopped before .NET has started. It's supposed to display a message to the effect that th...
0 votes