写点什么

Visual Studio 15 的内存占用探析

  • 2016-10-30
  • 本文字数:1542 字

    阅读完需:约 5 分钟

Jeff Martin 撰写了一系列关于 Visual Studio “15”性能分析的文章。在他的上一篇文章《 Visual Studio “15”的启动优化》中曾提到,微软已承诺全面提升 Visual Studio “15” IDE 的性能。本文将从内存处理的角度,探讨他们在 Technical Preview 5(TP5)中所做的提升:在主程序保留为一个 32 位进程的同时,将部分关键组件迁移到微软独有的进程。

在微软任职的 Ashok Kamath 针对这些改变在《 Visual Studio “15”的内存溢出崩溃减少优化》一文中做了更多的介绍,以便能从更全面的视角来看待这些改变。他提供了一种方法来度量微软开发团队所作出的改进。他提供了 2 个不同的指标:虚拟内存峰值 PVM(Peak Virtual Memory)和个人工作集峰值 PPWS(Peak Private Working Set)。PVM 指的是 VS15 主进程所占用的总内存数。由于主进程是 32 位的,因此它的最大值被限制为 4GB 内存。PPWS 指的是 VS15 的 devenv.exe 和相关进程所占用的物理内存数。

首先被移出 VS15 主进程的是 JavaScript 语言服务。JavaScript 语言服务提供智能提示、代码导航等功能。新的 JavaScript 服务由一个独立的 Node.js 进程协同 VS15 提供对 JavaScript 和 TypeScript 的支持。Kamath 团队通过在 VS 2015 Update 3(Visual Studio 之前的一个版本)和 VS15 Preview 5 中加载 WebSpaDurandal 方案来测量新服务的性能影响。在 VS15 Preview 5 中,PVM 占用量大约减少了 33%,但是 PPWS 的占用量减少得非常少,几乎可以忽略不计。

第二个内存优化的部分是关于调试器中的符号加载。纵观 Visual Studio 的近期发布历史,他们已经通过高侵入性地从 PDB 文件中预加载符号数据来让 C++ 调试器运行地更快。但是这个方案有一个弊端,那就是会消耗大量的内存。在 VS15 中,这个预加载功能被重写。新的预加载功能致力于只加载需要的信息而不是像之前那样“大而全”地加载。为了测量这一改进,Kamath 团队用 VS 2015 Update 3 和 VS15 Preview 5 打开 Unreal Engine 方案,并使用调试器调试 Unreal Engine 进程。结果,VS 2015 Update 3 不能执行这个操作,因为它会因为内存溢出错误而崩溃;TP5 可以执行这个操作,占用大约 3GB PVM 和大约 1.8GB PPWS。

第三个被移出主进程的是关于 Git 的组件。Visual Studio 的先前版本使用 libgit2 库,但是在 TP5 中改用 git.exe。通过使用 Chromium 包测量这个改进,发现在 TP5 中 VS 主进程占用了 0GB PVM,而 VS2015 占用了大约 300B PVM。至于 PPWS 的占用量,两者大致相当。

尽管测量工具已经提供了一些内存占用量减少的证据,但是开发者们获知这一消息后,针对微软采用的一些方案提出了许多问题。首先提到的是,更频繁的内存交换可能导致可用性下降。另外,一位名为“Syka”的评论者提出,尽管从主进程中移出部分组件会解除内存占用方面的限制,但是可能会造成潜在的性能下降。因为跨进程的进程通信相对于原来的进程内部的组件调用来说,会造成更高的通信成本。此外,一些评论者提到,Visual Studio 的真实问题并不是内存占用,而是由于主进程是 32 位而导致的寻址空间的稀缺。为此,他们再次呼吁微软能够开发 64 位版本的 Visual Studio(详情可参考《让VS 扩展支持64 位》)。

作者简介

Jeff Martin 拥有密歇根大学的 MBA 学位,曾在金融领域有所建树,但是为了紧随时代潮流,毅然投身计算机产业。他在业余时间喜欢和妻子一起旅行,阅读和编程。他刚著作了一本新书,《Visual Studio 2013 Cookbook》。可以在 Twitter 上关注他, http://twitter.com/jeffemartin

查看英文原文 Addressing Visual Studio 15’s Memory Usage


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-10-30 19:003155

评论

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

和鲸ModelWhale与中科可控X系列异构加速服务器完成适配认证,搭载海光芯片,构筑AI算力底座

ModelWhale

gpu 服务器 信创 算力 数据科学

对话在行人|九州通:携手用友打造招聘共享中心实现招聘数智化

用友BIP

2023全球商业创新大会 对话在行人

瑞技伙伴 | ZPE 带外管理方案,稳固您的IT世界

Bytebridge

数据中心 带外管理方案 ZPE

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换

JackJiang

网络编程 即时通讯 IM

正确选择数据库安全运维平台的几个原则-行云管家

行云管家

数据库 数据安全 数据库安全 安全运维

高性能计算与多模态处理的探索之旅:英伟达GH200性能优化与GPT-4V的算力加速未来

GPU算力

哪家堡垒机支持国密算法?有哪些功能?

行云管家

运维 堡垒机 安全运维 国密浏览器 国密算法

云计算进入 AI 原生时代

Baidu AICLOUD

大模型 RDMA AI 原生云

峰会倒计时 3 天!互联网与文娱论坛演讲亮点预告!

SelectDB

数据库 大数据 数据仓库 实时数仓 apache doris

梦幻西游手游详细图文架设教程

echeverra

梦幻西游

ABAQUS二次开发怎样接入Python代码?ABAQUS软件教程

思茂信息

abaqus abaqus软件 abaqus有限元仿真

DAPP智能合约双币质押挖矿项目系统开发

l8l259l3365

HarmonyOS音频开发指导:使用AVPlayer开发音频播放功能

HarmonyOS开发者

HarmonyOS

研发日常踩坑-Mysql分页数据重复 | 京东云技术团队

京东科技开发者

MySQL 数据库 分页 企业号10月PK榜

选择香港服务器发展线上业务的未来趋势:技术与市场的变化

一只扑棱蛾子

香港服务器

IBM只有29%的职位看学历?基于技能的招聘到底是什么?

用友BIP

智能招聘

在Vue中使用Mock.js虚拟接口数据实例详解

树上有只程序猿

Vue Mock.js

即刻报名,企业服务与新经济论坛亮点提前揭秘!

SelectDB

数据库 大数据 数据仓库 实时数仓 apache doris

中国水泥行业数字化采购:驱动产业链供应链现代化的关键

用友BIP

数智采购

想让你的代码简洁,试试这个SimpleDateFormat类高深用法

华为云开发者联盟

Java 后端 开发 华为云 华为云开发者联盟

不会写代码同学的福音——AI 代码生成器 Amazon CodeWhisperer(通过注释写代码)

亚马逊云科技 (Amazon Web Services)

人工智能 CodeWhisperer Amazon Lambda 云上探索实验室

社区团购,拯救消费降级的利器

用友BIP

社区团购

产品需求交付质量保证的“七重门” | 京东云技术团队

京东科技开发者

测试 交付质量 企业号10月PK榜

万字长文:拆解银行数智运营之困!

京东科技开发者

人工智能 数字化转型 金融 企业号10月PK榜

管控变更对提升质量的重要性

老张

质量保障 配置管理

深入理解 Netty FastThreadLocal

vivo互联网技术

性能优化 Netty ThreadLocal 内存泄漏 FastThreadLocal

腾讯云入选2023 Gartner分布式混合基础设施魔力象限

极客天地

Visual Studio 15的内存占用探析_.NET_Jeff Martin_InfoQ精选文章