Author Archive

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.

ReSharper 5.0 Preview: Call Tracking

Wednesday, March 17th, 2010

There’s a cool new feature in ReSharper 5.0 called Call Tracking (or, alternatively, Call Hierarchy). Basically, it’s a convenient way to perform an all-out Find Usages or Go To Declaration. You can access it by choosing ReSharper | Inspect | Outgoing Calls or ReSharper | Inspect | Incoming Calls.

There’s also Inspect This, a new shortcut to Call Tracking, Value Tracking, and Type Hierarchy features: Ctrl+Shift+Alt+A.

At first we thought of comparing our Call Tracking to Call Hierarchy in Visual Studio 2010. However, it turned out that the VS 2010 version is just not up to par: it doesn’t support events, interfaces, closures and a few other things. It offers no help at all with the use cases we present here. So we’re only going to talk about Call Tracking in ReSharper 5.0.

Events

Let’s search for an outgoing call from Foo (ReSharper | Inspect | Outgoing Calls):


   using System;
   public class C2
   {
     public event EventHandler E = (sender, args) => Subscription_In_Initializer();

     static void Subscription_In_Initializer()
     {
     }

     void Foo()
     {
       E(this, EventArgs.Empty);
     }
   }

   class C3
   {
     void Bar()
     {
       new C2().E += Subscription_In_Method;
     }

     void Subscription_In_Method(object sender, EventArgs e)
     {
     }
   }

Outgoing Call From Foo

Pretty self-explanatory. ReSharper easily finds all subscriptions to E and displays them as possible calls. Nothing too special, but handy for sure.

Generics

Consider this code sample:


   public abstract class Base<T>
   {
     public void Do(T value)
     {
       DoImplementation(value);
     }

     protected abstract void DoImplementation(T value);
   }

   public class Concrete1 : Base<int>
   {
     protected override void DoImplementation(int value)
     {
     }
   }

   public class Concrete2 : Base<string>
   {
     protected override void DoImplementation(string value)
     {
     }
   }

Now let’s look at outgoing calls from Base.Foo:

Outgoing Calls From Do

Speaks for itself.

Now, let’s add a Main class and try searching for outgoing calls from Foo:


   class Main
   {
     void Foo()
     {
       Concrete2 c = null; // null so that we don't clutter the call tree
       c.Do("string");
     }
   }

Outgoing Calls From Foo

Concrete1.DoImplementation doesn’t show up anymore! That’s because ReSharper looked at the type parameters and realized that Base.Do will be called with T->string (see the second line of results: Base<string>.Dostring means we’re calling a method that substitutes a specific type). Accordingly, ReSharper filtered out Concrete1 because it uses inheritance with the substitution T->int.

Now let’s look at a slightly more complex, yet very vital example using the Visitor pattern. Let’s search for incoming calls from ConcreteVisitor1.VisitNode1 (ReSharper | Inspect | Incoming Calls). Note how we’re going the other way here, in the direction opposite of method calls:


   public interface IVisitor<T>
   {
     void VisitNode1(T data);
   }

   class Node1
   {
     public void Accept<T>(IVisitor<T> v, T data)
     {
       v.VisitNode1(data);
     }
   }

   public class ConcreteVisitor1 : IVisitor<int>
   {
     public void VisitNode1(int data)
     {
     }
   }

   public class ConcreteVisitor2 : IVisitor<string>
   {
     public void VisitNode1(string data)
     {
     }
   }

   public class C1
   {
     void Foo()
     {
       var v = new ConcreteVisitor1();
       new Node1().Accept(v, 1);
     }

     void Foo2()
     {
       var v = new ConcreteVisitor2();
       new Node1().Accept(v, "string");
     }
   }

The result:

Incoming Calls to VisitNode

While traversing the generic Visitor, ReSharper did not lose any details about the substituted type parameters and successfully filtered out the irrelevant call from Foo2. When you have a highly-branched hierarchy and a large number of generic types, this kind of logic helps to really narrow down your search.

Constructors

Let’s also look at an artificial example using constructors and field initializers. Let’s search for outgoing calls from the Derived class constructor:


   class Base
   {
     public Base()
     {
       Base_Bar();
     }

     void Base_Bar()
     {
     }
   }

   class Derived : Base
   {
     int _i = Foo();

     public Derived()
     {
       Bar();
     }

     void Bar()
     {
     }

     static int Foo()
     {
       return 0;
     }
   }

Outgoing Calls From Derived

Again, nothing out of the ordinary. ReSharper simply displays calls in their the natural order, mindfully listing the implicit call of the base constructor. For a less-experienced developer, this saves a lot of time spent understanding code, and is a nice crutch to lean on for an expert.

Value Tracking

And here’s the final tidbit. If you open the ReSharper | Inspect menu, you’ll see two very interesting items: Value Origin and Value Destination. These functions implement value tracking: they let you track where a particular variable value or parameter value came from, or where it is headed. Naturally, it works with collections and delegates (it determines that an item was taken from a collection and then searches for usages of that particular collection) and is indispensable for identifying the causes of NullReferenceExceptions.

Illustrating this will take a whole batch of screenshots and examples, so please stay tuned for our next post.

Author: Alexander Zverev, senior ReSharper developer. Translated from original article (in Russian)

ReSharper Scores with Readers and Editors at Visual Studio Magazine

Tuesday, August 11th, 2009

JetBrains ReSharper has earned two of the most coveted awards at the Visual Studio Magazine 2009 Readers Choice awards:
Visual Studio Magazine 2009 Readers Choice

  • Best Development Tool (Readers Choice): In one of the most hotly contested categories: Development Tools, ReSharper beat out 80 other products to claim the top honor.
  • Most Valuable Tool (Editors Choice): Readers and panelists were asked to single out the one product in the entire survey that stood out as the most valuable, effective and compelling tool for developers. JetBrains ReSharper was their choice.

“We won’t develop without [ReSharper],” wrote one voter. No .NET developer at JetBrains does, and we don’t recommend you do either!

Seriously though, we can’t thank all of you enough for your support and recognition. Feedback like this is worth triple the effort we put into product development!

Keep developing with pleasure!

- JetBrains ReSharper Team

JetBrains has fun at NDC Norway

Friday, July 10th, 2009

A couple of weeks ago we attended NDC Norway. The conference was organized on a very high level and went very well. We were excited and surprised to see how popular our products are in that part of the world!

It was also nice to chat with all those who stopped by our booth. And on that note - congratulations to the following lucky winners of ReSharper + dotTrace productivity packs:

Lars Kristian Hagen
Harry Solsem
Gante Magnussa
Alf Kare Lefdal
Ronny Hansen

Your licenses should be waiting for you in your e-mail inbox!

ReSharper Build Configurator

Wednesday, April 1st, 2009

Have you ever wanted to really customize ReSharper, just the way you want it?

Now you can build your own, with our brand new ReSharper Configurator. Choose the analysis engine, select the feature packages you need, the supported languages, and even the colors! Go lightweight or feature-rich - it’s all up to you.

Click here to build your ReSharper now: http://www.jetbrains.com/resharper/build_now.html

Our Productivity Tools gain 2 Jolt Productivity Awards

Tuesday, March 17th, 2009

The 19th Jolt Awards were finally announced last week. Our own .NET productivity tools, dotTrace and ReSharper, were named recipients of two Productivity Awards!

ReSharper was one of the top three Development Environments.
dotTrace was recognized as a top productivity Utility.

Thanks again for making our products a success, folks. Keep developing with JetBrains, productivity and pleasure!

JetBrains ReSharper Picking Up Recognition at the Great Indian Developer Awards 2009

Friday, March 6th, 2009

The list of global software conferences has recently been extended with a new exciting member - the Great Indian Developer Summit, which will host the second edition of Great Indian Developer Awards (GIDA) this year.

Celebrating software development product excellence, GIDA is India’s premiere awards event with 100+ nominees shortlisted for this year’s upcoming edition, the event’s second so far.

Our own ReSharper was chosen as one of nine nominees in the Development Environments category, along with Microsoft Visual Studio 2008, Oracle JDeveloper, and six other outstanding development tools.

Other categories included Design and Modeling, Change and Configuration Management, Collaboration Solution Testing, Security, Content Management, Web Development, Mobile Development, Frameworks, and Database.

The winners will be announced and honored at the Great Indian Developer Summit 2009 to be held on April 25, 2009, in Bangalore, India. The awards jury is comprised of distinguished executives, seasoned industry professionals, and internationally recognized academia.

For more information on the awards and to vote, see official GIDA web site.

3 Jolt Finalists for JetBrains

Tuesday, December 30th, 2008

JetBrains tools continue to receive recognition and praise: three of them have been named finalists in this year’s Jolt Awards!

ReSharper, our intelligent add-in for Microsoft Visual Studio that you love so much, was honored as one of the five best Development Environments.

In the Change and Configuration Management category, the finalists included TeamCity, our distributed build management and continuous integration server.

And last but not least, dotTrace, our super-fast and efficient .NET profiling tool, was picked by Jolt judges as one of the best five Utilities.

Best of all, each of these products still has a shot at winning the big kahuna - the Jolt Excellence award, or maybe a Jolt Productivity award! We’ll keep you posted.

We thank you, our customers, for making our products a success.
Keep developing with JetBrains - and with pleasure!

Tales from the Development Crypt: Going Full Speed Ahead

Wednesday, November 26th, 2008

We just opened an 80Gb performance snapshot. It took dotTrace only 34 seconds after launch to show the call stack!

The downside: no more coffee breaks while snapshots are being opened!

Announcing ‘Tales From the Development Crypt’

Wednesday, October 29th, 2008

Our .NET products, ReSharper and dotTrace, are being developed as we speak. Yet we do not speak about that enough.

It recently came to our attention that our .NET developers are dying to tell you about the goodies they’ve been able to come up with, design and code. They want to share their heartwarming stories of additional application performance analysis tools, new intelligent context actions and ever smarter null reference handling with, well, anyone who’ll listen.

So, we’ve decided we’ll be bringing you tittillating news bits about dotTrace and ReSharper as they keep coming in.

Stay Tuned!*
  
*Tales From the Development Crypt coming soon to a .NET blog near you.