剑客
关注科技互联网

Visual Studio 15的内存占用探析

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位 》)。

作者简介

Visual Studio 15的内存占用探析

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 )关注我们。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址