当前位置:存储行业动态 → 正文

Visual Studio 15的内存占用探析

责任编辑:editor005 作者:Jeff Martin |来源:企业网D1Net  2016-10-31 16:02:42 本文摘自:INFOQ

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

关键字:StudioVisual

本文摘自:INFOQ

x Visual Studio 15的内存占用探析 扫一扫
分享本文到朋友圈
当前位置:存储行业动态 → 正文

Visual Studio 15的内存占用探析

责任编辑:editor005 作者:Jeff Martin |来源:企业网D1Net  2016-10-31 16:02:42 本文摘自:INFOQ

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

关键字:StudioVisual

本文摘自:INFOQ

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^