QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

再谈 Visual Studio 11 的性能

2012 年 4 月 04 日

我们上次讨论性能的时候,微软的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

2012 年 4 月 04 日 22:032292
用户头像

发布了 340 篇内容, 共 113.1 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

超详细讲解网络中的数据链路层~

程序员的时光

第7周总结:性能

慵秋

Kubernetes的拐点助推器:左手开源,右手边缘计算

华为云开发者社区

Kubernetes 容器 边缘计算 容器技术 华为云

数字货币并不能完美诠释区块链金融

CECBC区块链专委会

区块链技术 社会价值 打通数据孤岛 重建产业信用

http请求压测工具

潜默闻雨

web压力性能测试

周冬辉

压力测试

为啥Underlay才是容器网络的最佳落地选择

BoCloud博云

云计算 容器 容器网络

百度大脑OCR技术助力钢铁物流实现智能管理

百度大脑

人工智能 百度大脑 文字识别

【数据结构】Java 常用集合类 ConcurrentHashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构 并发编程

架构感悟 7- 性能优化何为

旭东(Frank)

web 性能压测工具

Z冰红茶

挑战10的1,143,913次方种算法组合:这都不是事儿!

华为云开发者社区

华为 算法 进化 华为云

Self-Compassion,对自己好一点

霍太稳@极客邦科技

创业 个人成长 自我管理 创业心态

技术​选型的艺术

YourBatman

技术选型 湖北

程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则

图南日晟

Nginx PHP-FPM 架构设计 环境安装

关于数据库索引的知识点,你所需要了解的都在这儿了

鄙人薛某

MySQL 索引结构 索引 MySQL优化

进击的 Flink:网易云音乐实时数仓建设实践

Apache Flink

flink

创业使人成长系列 (4)- 常用账号申请

石云升

支付宝 微信商户 商标

Django Models随机获取指定数量数据方法

BigYoung

django 数据 random 随机 Models

【小白学YOLO】YOLOv3网络结构细致解析

华为云开发者社区

人工智能 网络 物体检测 华为云 网络层

计算机网络基础(八)---网络层-路由概述

书旅

计算机网络 网络协议 计算机基础 AS

原生Ingress灰度发布能力不够?我们是这么干的

BoCloud博云

云计算 容器 云原生 PaaS

Netty-物联网设备Channel管理

凸出

Java Netty ConcurrentHashMap 物联网 channel

前浪出新招,996已过时,互联网员工都开始住公司了!(爆公司信息)

程序员生活志

加班 996 007 互联网公司

漫画:如何证明sleep不释放锁,而wait释放锁?

王磊

Java Wait Sleep

PV与UV你的网站也可以

北漂码农有话说

为什么我们要自主开发一个稳定可靠的容器网络

BoCloud博云

云计算 PaaS fabric 容器云

随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

chenzt

【数据结构】Java 常用集合类 HashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构

API网关——Kong实践分享

BoCloud博云

云计算 容器 PaaS API

BIGO海量小文件存储实践

InfoQ_3597a20b53cc

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

再谈Visual Studio 11的性能-InfoQ