Recently we looked at ReSharper's past. You probably noticed that we often have x.5 releases, aimed at performance and stabilization. After the big marathon run for C# 3.0 and VS2008, we finally got some time to perform housekeeping, clean out and sweeping tasks. Not just for beautiful code, but for improvements in speed and memory that require architecture changes.
Since ReSharper 4.1 release in September, we spent lots of time with dotTrace, running hundreds of use cases and analyzing results. We identified several major bottlenecks that hindered performance, and hundreds of smaller problems. We also analyzed managed and unmanaged memory usage in many types of solutions of different sizes. For many issues, small changes here and there just weren’t enough. We had to change data structures, algorithms, dependencies, ownership of objects, and sometimes even basic principles of our code.
Tough decision, but we decided that performance, memory usage and building a foundation for further improvements were of a higher priority than API compatibility. Without that massive code cleanup we would have been spending more and more resources to make our product better for you, and without much success. Please accept our apologies, plug-in developers! We really had to do that to gain 30% speed improvement overall, up to 60% in many cases if you use multicore processor. We‘re hoping to extend parallel processing capabilities in ReSharper 5 and improve speed even more, but we had to lay a foundation for this.
Another big part of our work was dedicated to Visual Studio integration. It is too early to speak about Visual Studio 2010 integration at the moment, but even earlier versions required substantial efforts. We improved integration with various packages, provided fixes or workarounds for a good deal of problems. We spent lots of time doing low level debugging in mixed (managed/unmanaged) environment and I must admit -- it was fun but also very hard. Microsoft Development Tools Division did a great job helping us solve issues and answering our questions (which were far from being trivial, as you might guess). In fact, during the past year we got much more assistance from Microsoft than ever! Thank you guys, I hope you don't have my picture attached to your dartboards :)
Developing new features and improving existing ones was the last, but not the least piece of our work. We reworked ReSharper naming system and, finally, you can configure a style for virtually any identifier . We added more functionality to Solution Wide Analysis -- it is now able to highlight globally unused symbols for you, redundant virtual keyword, parameters that are not used in any overrides, and much more. My favorite global inspection detects potential problems in cross-casts, like when you cast a variable of type IFoo to IBar, but there is no class in solution that implements both interfaces! New Go to Implementation feature allows you to jump straight to the code that might run, skipping all interfaces and abstract classes. Find Referenced Code can now run on any selection in Solution Explorer, quickly showing you dependencies of a particular part of your solution. MSTest is now built into ReSharper, Visual Basic .NET support has been greatly improved, and many reworked refactorings are now particularly rock solid.
These days we are preparing to publish ReSharper 4.5 Beta. As more and more people download ReSharper 4.5 nightly builds, we get invaluable feedback to make this release really shiny. It is currently very stable, with several known glitches that we are fixing. Each new build is better than previous ones.
Don’t hesitate to download it, try it yourself and tell us how it works for you!
We mean it: we really, really need to know how it behaves in your unique environment with your unique solution, and it’s only you who can let us know about it!