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