We converted a huge project (the Visual Basic and C# compilers) from native to managed code. It really was huge – hundreds of projects, two million lines of code. How did we do it without sacrificing performance? How did we squeeze out every last bit of performance from the CLR and .NET garbage collector? How did we maintain startup performance? How did we achieve acceptable typing responsiveness? What surprised us? Learn which tools we used to analyze performance, the techniques we used to bring it up to speed, and the fundamental architectural lessons we learned.