我们上次讨论性能的时候,微软的Larry Sullivan 就强调,PerfWatson 对于生成可评审的性能数据很重要,那让Visual Studio 团队可以做出改善。Sullivan 现在可以告诉大家,他的团队已经可以处理这些数据,并对VS11 做出了特定的改变。
虚拟内存
Sullivan 首先讨论了团队对 Visual Studio 内存需求所采用的方法。他们并没有把程序转换为本地的 64 位应用程序,从而访问更多内存,而是决定把重点放在如何更有效地使用 32 位进程所提供的内存。这样,团队首先处理的是 VS 中消耗内存最多的 DLL。他们检查了 800 多个 DLL,看其中是否存在对内存低效和过度使用的情况。
消耗内存第二多的就是 VS 中各种组件所使用的本地堆结构(native heap)。除了降低内存使用之外,这次任务的过程中还发现“上百次机会,可以找到‘准备就绪’的缺陷,团队在将来可以修正它们”。
最终的结果是,“当使用 Visual Studio 载入 Web 解决方案的时候,会少载入接近 300 个 DLL 库,并节省差不多 400MB 的虚拟内存”。在报告中没有直接提到对于其他类型解决方案获得的性能提升,但是 Sullivan 在以下评论中说到:
我能够找到拥有那些现成数据的人。在 Beta 版中,对于 C++ 来说虚拟内存表现平平,但是我们会在下一个 Beta 版中做出更大改进。在 Beta 版中大概能够节省 35MB,那差不多是 12% 的提升。我们会继续为 C++ 开发者改善 Visual Studio 11。
解决方案载入时间提升
解决方案的加载时间会影响所有 VS 用户,团队通过引入异步加载解决方案来解决这个问题。微软 Visual Studio Pro 团队的 Nathan Halstead 提供了关于这个方法的信息,VS 会分两个阶段来加载项目,模式加载(Modal Loading)和后台加载(Background Loading)。
在模式加载阶段,VS11 会基于上次会话打开的文件,载入用户可能需要用到的项目。如果其他项目和打开的项目有依赖关系,那么也会在这个阶段载入。不重要的项目会被安排到后台阶段载入。
后台加载阶段会解包 UI 线程,并开始在后台处理剩余的加载任务。如果用户的动作表名需要未加载的项目,那么 VS 会在继续进行后台加载之前把那个加载过程放到前面来。
“编译 - 编辑 - 调试”循环
最后,Visual Studio Ultimate 团队的 Tim Wagner描述了对日常“编译 - 编辑 - 调试”循环所做出的改变。Wagner 说到,VS 的构建版只是要完成功能,而性能会在 VS 11 Beta 版中做出提升。不幸的是,Wagner 的说法专注于 Windows 8 上 Metro 应用程序开发的性能,那是 VS11 特定的功能,与 Visual Studio 之前版本有很大区别。
微软的首席项目经理 Ayman Shoukry 提供了关于 C++ 性能的一些暗示:
在 VC++ 的编译器和连接器方面,我们做出了多项提升, 特别是让 Dev11 的编译器可以进行多线程处理。因此,在构建某些大型内部微软产品的时候,我们看到编译时间有了很大改善。我们会发布更详细的博客,说明在 Dev11 VC++ 中做出的构建时间方面的改善。
尽管这些改善还没有完成,但 Wagner 承诺说:
这里关于进展的报告并不意味着我们已经满足于 Beta 版的性能——我们会一直努力,争取在 Dev 11 中获得更多改善。
评论