Posts Tagged ‘dotTrace 4.0 Performance’

Simulating Performance Improvements with dotTrace

Thursday, March 10th, 2011

Let’s say you’re trying to improve performance of some application that is doing poorly. You manage to find what could potentially be a bottleneck and decide that it needs fixing. Of course, Murphy’s Law dictates that the potential issue you’ve found is probably one of the harder problems to solve as it might involve improving a calculation algorithm or changing some third party framework.

This could turn into quite an expensive operation. It would be a shame to spend time and resources on it to not have a the desired impact on the overall system. In other words, it’s best to know you’re barking up the right tree.

What if…

That’s where dotTrace Adjust Time feature comes in very handy. By allowing us to adjust the amount of time spent in a particular spot of an application, we can simulate the overall impact it would if we were to perform optimizations in that area, without having to actually do them first.

Let’s take a look at the following call tree of a performance trace for a sample application

Looking at the call trace, we can see that the majority of the time spent is dedicated to IntersectRay. This method in turn calls Sphere.Intersect and Plane.Intersect. Out of the two, the first is the more time-consuming

What would happen if we were to now try and optimize the performance of Sphere.Intersect? What overall impact would it have if the time it takes to complete the call were reduced by 30%.

Now, instead of spending time on re-designing the method, we will use the simulation functionality in dotTrace to verify whether it’s worth a potential effort.

To simulate the improvement, we right-click on the Intersect line and select Adjust Time

We are then prompted by a dialog box that allows us to adjust the time by a factor of 0 to 100.

Apart from adjusting the time, we can indicate whether we want the adjustment to be only on the specified call stack that we are currently on (Selected Call Stack), applied it to all call stacks (All call stacks) of this method or call stacks with the calling method as the parent function (this last option is available in dotTrace 4.5 EAP only).

We can also specify whether we want the adjustment to effect the overall time of the function (the function itself and all functions it calls), only the function’s own time or all functions of the the specified class.

It is important when applying adjustments to take these options into account because selecting different values can have an impact not only on the current call stack we are trying to optimize but also on the entire application.

In our case, we are going to apply adjustments to all call stacks and to the function’s total time. We will apply a 30% reduction, which means we will enter 70 as the Factor value. This now produces the following result

First thing to notice is that the line where we’ve adjusted the time is crossed out. Next to each time, we now see a new amount in the color green and the original time in blue in brackets. Focusing on the IntersectRay method, a 30% improvement of Sphere.Intersect would lead to approximately 19% improvement on the call and an overall increase of 15% in terms of performance. Is that worth it?

Let’s dig deeper. Opening up Sphere.Intersect we see that 24% of the time is dedicated to the Vector.op_Multiply. What would happen if we were to focus our improvement exclusively on this method call? Applying the same 30% increase in performance, we’d end up with an overall increase of 14%

Despite representing only 1/3 of the total time of Sphere.Intersect, an improvement on that call alone will provide us with the same overall performance increase as concentrating on the complete method. In fact, it makes more sense to optimize the op_Multiply method since it’s used extensively throughout the application. That’s where we should focus our efforts!

Optimization Shortcuts in 4.5

dotTrace 4.5, which at the time of publishing this post is in EAP, introduces some shortcuts for time adjustment. When right-clicking on Adjust Time context menu, a submenu displays two additional options:

which allow us to quickly optimize the current (or all) instances of a specific method. Optimizing means setting the total time to 0.

Experimenting before committing

The reason for the Adjust Time feature in dotTrace is for experimenting with different calls before actually having to commit to changes. Often a 10% increase in one function can lead to a 20% overall improvement. Other times, it can lead to a 2% improvement. Knowing this before hand is very valuable since it provides us with something to balance against to see not only whether we’re barking up the wrong tree, but also if it’s worth barking at all.

dotCover 1.0.1, dotTrace 4.0.1 Performance Bugfix Releases

Thursday, November 18th, 2010

Today we’re coming out with initial bugfix releases for both dotCover and dotTrace Performance.

Please download dotCover 1.0.1 and dotTrace 4.0.1 Performance if you have issues with previous releases of these products. Here’s the list of most notable improvements in these bugfix releases.

  • What’s new in dotTrace 4.0.1 Performance
    • Dramatic performance increase in scenarios involving snapshot navigation and call folding.
    • Other profilers are not any more messing with dotTrace registry settings.
    • Fixed an issue with tracing mode profiling in certain scenarios incl. SharePoint applications: dotTrace no longer exits after throwing “Can’t get thread handle” exception. (DTRC-4954)
    • Fixed an OutOfMemory exception on saving snapshots (DTRC-5034)
    • Fixed dotTrace Performance interoperability with Hyper-V virtual machines.
    • Attempts to profile Windows Mobile 2003 applications are now handled in a much less obscure manner, with dotTrace clearly telling that this kind of applications is not supported.
  • What’s new in dotCover 1.0.1
    • Ctrl+Alt+Y - a new shortcut to switch coverage highlighting on/off, plus a new dotCover menu item called Toggle Code Highlighting.
    • The Coverage tool window now remembers preferences set during previous run, such as whether to highlight coverage and grouping options, and expanded/collapsed state of coverage tree nodes.
    • Auto-generated assemblies, such as those generated during execution of MSTest tests, are no longer taken into account by coverage analysis.
    • You can now specify exactly which files are subject to coverage highlighting with filters. dotCover respects the filtering settings not only when it includes items in the coverage tree, but when it highlights coverage as well.
    • Fixed issues related to License Information dialog box closing unexpectedly while entering license keys.

Relevant links:

dotCover 1.0 and dotTrace 4 Performance are Released!

Wednesday, September 15th, 2010

There’s joy and happiness all around for .NET developers as we’re finally releasing dotTrace 4 Performance and dotCover to the market!

Download dotCover and dotTrace 4 Performance right now to make your applications fast and properly covered.

Just as a reminder, dotCover is a brand new, simple .NET code coverage tool that:

  • Integrates with Visual Studio 2005, 2008, or 2010 to analyze unit test coverage in .NET Framework and Silverlight applications.
  • Supports multiple unit testing frameworks (MSTest, NUnit, xUnit, MSpec, etc.)
  • Highlights code that is covered (or not covered) by unit tests.
  • Provides code coverage via application execution.
  • Detects which unit tests cover any particular location in code.
  • Integrates with ReSharper’s unit testing toolset.
  • Provides a console utility, enabling to use it with a Continuous Integration server.
  • Generates XML-based code coverage reports.

Learn more about dotCover on this blog and on JetBrains TV.

dotTrace 4 Performance helps .NET developers:

  • Get accurate info on performance bottlenecks in a variety of .NET applications including those built using .NET Framework 4, .NET Compact Framework 3.5, and Silverlight 4.
  • Profile applications with great accuracy in several modes, including profiling remote applications.
  • Profile complex desktop and server applications, thanks to unprecedented robustness.
  • Immediately estimate how removing a particular bottleneck would affect the overall application performance.
  • Launch profiling from Microsoft Visual Studio and quickly switch back to review problematic source code.

Learn more about dotTrace 4 Performance on JetBrains TV. You might also take a look at the updated dotTrace documentation section for brand new online help and a Getting Started tutorial.

dotTrace 4 Memory is expected to come out in several months. Meanwhile, dotTrace 3.5 Memory is available, which is a memory part from dotTrace 3.1.

dotTrace 4 Performance comes in two editions, Standard and Professional. You can learn more about the new editioning scheme in dotTrace FAQ.

If you’re an existing dotTrace customer, then bang! dotTrace 3.5 Memory is free for you. Better yet, if your license was purchased on or after December 17, 2008, you get a free upgrade to dotTrace 4 Performance and dotTrace 3.5 Memory.

Download dotCover (free 30-day evaluation) and dotTrace 4 Performance (free 10-day evaluation).

Release Day: ReSharper 5.1.1; dotCover and dotTrace RCs

Wednesday, September 1st, 2010

Starting today, ReSharper 5.1.1 is available for download, as well as release candidates for dotCover 1.0 and dotTrace 4 Performance.

Important! We have initially published a wrong ReSharper build (5.1.1751.10). If you have downloaded it, please go to the download page and try again: we changed the download link to point to 5.1.1751.8. Sorry for the mistake. Unfortunately sometimes mistakes happen.

ReSharper 5.1.1. This minor release is pure bug and performance fixing here and there, including (but not limited to) the following areas:

  • It introduces a fresh set of performance improvements under Visual Studio 2010, particularly in regard to displaying tooltips and error stripe behavior in intense editing scenarios.
  • It improves stability with Visual Studio 2010 by addressing reports on VS crashes while editing markup pages in web projects and applications, and during structural search and replace (for example, RSRP-188698).
  • It strengthens NUnit support in the test runner in certain ways, specifically by bundling NUnit 2.5.7.

dotTrace 4 Performance RC and dotCover 1.0 RC. We feel both products are ready for release. If you have a different opinion, please report your issues asap to dotTrace or dotCover issue trackers.

One more good thing to note is that with this RC release, we’re announcing dotCover pricing. Here’s how it goes:

  • dotCover licenses will be subscription-based. That means, when you buy a dotCover subscription, you get 1 full year of free upgrades to any new versions. As the first year passes, you have an option to renew your subscription for another year of free upgrades. Even if you don’t renew, you’ll be able to use your current dotCover version without any limitations.
  • A commercial dotCover license will cost $199, and a personal license will be worth $99.
  • Before the New Year 2011, introductory prices for both types of licenses are valid, meaning that a commercial license will be available at $99, and a personal license at $49.

Enjoy the updated .NET pack and ping us if something goes wrong.

dotTrace 4 Pricing

Friday, July 2nd, 2010

Good news today: we have finalized pricing options for both new dotTrace 4.0 licenses and upgrades.

Before you familiarize yourself with the pricing scheme, here’s a quick reminder of the new dotTrace product and editioning scheme:

  • dotTrace stops being an all-in-one profiler and splits into two products: dotTrace Performance and dotTrace Memory.
  • dotTrace 4.0 Performance is scheduled for release in August 2010, in two editions: Standard and Professional. Here’s how the two editions compare. In short, compared to the Standard edition, dotTrace 4.0 Professional adds remote profiling, support for Silverlight 4 and .NET Compact Framework 3.5.
  • dotTrace 4.0 Memory will not be released simultaneously with the new performance profiler but rather in a few months after it. The current release schedule for dotTrace 4.0 Memory is Fall this year.
  • Because of the asynchronous release dates of the two 4.0 profilers, for the time being, we’ll make available dotTrace 3.5 Memory. As opposed to dotTrace 4.0 Performance which is a totally redesigned product, dotTrace 3.5 Memory is the memory profiling part cut from dotTrace 3.1 and reinforced with support for applications based on .NET Framework 1.0-3.5.

After due clarification of terms, here’s a couple of summary points regarding upgrades:

  1. We’re ready to announce prices for upgrading from your existing dotTrace licenses to dotTrace 4 Performance and dotTrace 3.5 Memory. Regarding upgrades to dotTrace 4.0 Memory, we’ll update you on that this Fall, as soon as we approach the dotTrace 4.0 Memory release.
  2. You’ll be able to upgrade your existing dotTrace license in any way you want:
    • To dotTrace 4.0 Performance.
    • To dotTrace 4.0 Memory.
    • To the bundle of these products.
  3. If you have purchased your dotTrace license on or after December 17, 2008, you’ll get a free upgrade to the bundle of dotTrace 4.0 Performance Professional + dotTrace 3.5 Memory Standard. This applies to any kind of license: personal, per-developer, or floating.
  4. If you have purchased any dotTrace license before December 17, 2008, you’ll get dotTrace 3.5 Memory Standard for free (this free upgrade opportunity, once again, is valid for all kinds of licenses), and an option to upgrade to dotTrace 4.0 Performance at a price according to the following upgrade table. All upgrade rates are roughly 60% of corresponding new license rates.

Table 1. dotTrace pricing: upgrade licenses

Upgrade to: dotTrace 3.5 Memory dotTrace 4.0 Performance dotTrace bundle
Standard Standard Professional 4.0 Performance Pro
+ 3.5 Memory Standard
Any license purchased on or after December 17, 2008 N/A N/A N/A FREE
Personal license FREE $119 $179 $179
Per-developer commercial license FREE $199 $299 $299
Floating commercial license FREE $1199 $1799 $1799

In case you don’t use dotTrace, here are the prices for new dotTrace licenses.

Table 2. dotTrace pricing: new licenses

dotTrace 3.5 Memory dotTrace 4.0 Performance dotTrace bundle
Standard Standard Professional 4.0 Performance Pro
+ 3.5 Memory Standard
Personal license $149 $199 $299 $399
Per-developer commercial license $299 $399 $599 $749
Floating commercial license $999 $1999 $2999 $3499

dotTrace 4 Performance Beta 3

Friday, July 2nd, 2010

We’ve just released the third Beta of dotTrace 4.0 Performance. Here’s the download link, and here’s the complete release notes.

Since we’ve passed the feature freeze, this Beta release doesn’t bring new functionality — instead, it is focused on stabilizing the product ahead of the final release that is currently scheduled for late Summer.

Please download the new dotTrace Beta, and if you discover new issues with this Beta release and/or subsequent nightly builds, please report them to our bug tracker.

dotTrace 4 Performance Closes In On Public Release with Beta 2

Tuesday, June 1st, 2010

The second beta release of dotTrace 4 Performance is available for download starting today.

Improvements include:

  • Thoroughly redesigned profiling session configuration wizard.
  • More project types supported when you’re profiling from Visual Studio, including XNA projects — meaning you should no longer face the annoying “Project kind is not supported” message.
  • Improved line-by-line profiling in different scenarios in .NET 1.x and .NET 3.5 applications.
  • Lots of bug fixes, big and small!

Here’s the complete release notes.

Make sure to download dotTrace 4 Performance Beta 2 for a 30-day free trial! If it happens to run out before we come up with the final release, don’t forget that fresh Nightly Builds are being updated on a regular basis.

dotTrace 4.0 Puts On a Fine Performance

Thursday, March 18th, 2010


Front seats at the ballet: $200

Front seats at the ball game: $100

Quickly spotting bottlenecks in your .NET application: priceless

There are some performances money can buy. For everything else, there’s dotTrace 4.0 Performance.


Jokes aside, here’s what dotTrace 4.0 Performance, currently in Beta, brings to the table.

Support for:

  • Visual Studio 2005, 2008, and 2010
  • .NET Compact Framework 3.5
  • .NET Framework 1.0 to 4.0
  • Silverlight 4

New profiling modes:

  • Remote profiling: connect to a remote machine to profile a standalone or web application, or a Windows service.
  • Line-by-line profiling: view detailed timing information for every statement in methods that have source code available.

What-if scenarios:

  • Ever thought, “What if I optimize this function by 40%?”? Now dotTrace knows the answer! It can recalculate a snapshot without reprofiling your application, so you can instantly estimate potential performance gains.

New edition scheme:

  • dotTrace 4.0 Performance comes in two editions: Standard and Professional. Standard Edition provides all the functionality that is available in Professional Edition, excluding support for .NET Compact Framework 3.5, Silverlight 4, and remote profiling.

Other goodies:

  • Improved speed and accuracy in all modes, plus a ‘high accuracy’ flag to take into account the time spent inside the profiler.
  • Extremely robust handling of huge snapshots (up to hundreds of GB!)
  • Snapshot annotations:

Read more at What’s New.

Download a free 30-day trial of dotTrace 4.0 Performance Beta today.

More questions? Check out the updated dotTrace FAQ.