再谈Visual Studio 11的性能

我们上次讨论性能的时候,微软的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中获得更多改善。

查看英文原文:Visual Studio 11 Performance Revisited

This entry was posted in IDE. Bookmark the permalink.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s