
Visual Studio caches the component model (which is good but sometimes also needs a gentle nudge), whereas ReSharper transparently invalidates its component cache when any file changes.

Visual Studio and ReSharper differ in their approach to component load and discovery.

Components can be loaded when the host starts, when a solution is loaded, just-in-time when needed, … Components are registered using attributes in extension code, and then loaded at the appropriate time. ReSharper’s component model is quite advanced. Third-parties can implement additional functionality through extensions on top the ReSharper component model.We have a number of standalone products like dotPeek, dotMemory and dotTrace, as well as the ReSharper command-line tools, that all depend on and reuse components of ReSharper.There are several reasons for having our own component model: ReSharper is one of those components, but also comes with its own component model. Visual Studio uses the Managed Extensibility Framework (MEF) to determine load order and specify component interdependencies. Visual Studio is essentially a combination of the Visual Studio Shell which provides common functionality and hosts modules defined in VSPackages, and a number of those VSPackages that provide C# editing, web tools, Azure tools, a WPF designer, refactoring tools, and more.Īll of these components have to be loaded at some point, and often depend on other components.

Performance improvements in ReSharper 2018.1.1.Component composition, just-in-time-compilation, the UI thread.Introducing the ReSharper performance series.In this post, we will look at improving startup of Visual Studio and ReSharper. It is a big part, but there are additional areas that can be improved. This brings many benefits: both Visual Studio and ReSharper would run in their own process, have their own thread pool, and their own memory space.īy itself, this is not the silver bullet that will fix performance, however. In the previous post of our ReSharper performance series, we have seen that it makes a lot of sense to explore running it as a separate process.
