Visual Studio”15“的内存溢出崩溃锐减

[原文发表地址]: Reduced Out of Memory Crashes in Visual Studio “15” [原文发表时间]: October 12, 2016   这是Visual Studio “15” Preview 5中关于性能改善五部分系列中的第三篇博客。前两篇博客介绍的是在Visual Studio “15”中启动更快和项目解决方案加载时间更短。 Visual Studio集多种功能于一身,数百万的开发人员都依赖于它进行高效的工作。支持如此多的功能,而且随着开发者期望的响应速度的提高,内存消耗就有所增加。然而,在Visual Studio 2015中,在某些情况下的内存使用量过大。这导致了一些不利的影响,例如内存溢出崩溃,UI反应迟缓。我们收到了大量用户对于这些问题的反馈。在VS “15”中我们正在解决这些问题,同时不会削弱Visual Studio丰富的功能和性能。 我们正在优化Visual Studio的很多功能,这篇文章介绍了三个具体领域的进展: JavaScript与 TypeScript语言服务,调试器符号文件加载,VS中的Git支持。在本文中我将对每一个测试场景比较以下两个指标,来展示我们所取得的进展: 峰值虚拟内存: Visual Studio是一个32位的应用,这意味着消耗的虚拟内存可以达到4GB。超过上限的内存分配会导致Visual Studio出现内存溢出错误(OOM)而崩溃。峰值虚拟内存是一个用来度量进程的内存将如何接近所限制的4GB的指标,或者换句话说,可以度量一个进程是如何接近崩溃的指标。 峰值私有工作集:一个包含了进程执行的代码或进程涉及的数据的虚拟内存的子集需要被放在物理内存中。“工作集”是这样的物理内存消耗的度量标准。这种工作集的一部分称作“私有工作集”,是属于一个给定进程的内存,并且是单独属于这个进程的。因为这样的内存不是进程间共享的,他们在系统上的消耗相对较高。本文的测量数据包括了Visual Studio (devenv.exe)的峰值私有工作集和相关的附属进程。   JavaScript语言服务 超过三分之一的Visual Studio开发人员定期编写JavaScript (JS),使JS语言服务成为在相当数量的Visual Studio会话中需要加载的一部分。JS语言服务提供的功能如智能感知、代码导航和一些使JS编辑高效的功能。 为了支持这种生产力特性并且确保他们响应迅速,语言服务消耗了不少的内存。内存的使用量取决于解决方案的特性、工程的数量、文件的数量以及文件大小。此外,JS语言服务通常会和另一种语言服务一起被加载,例如C#,这会增加进程的内存压力。因此,提高JS语言服务的内存占用对减少VS中内存溢出崩溃是至关重要的。 在VS “15”中,我们想要确保Visual Studio可靠性不会被JS代码造成的内存消耗而不利地影响。为了实现这个目标而不影响JavaScript的编辑体验,在VS“15” Preview 5中我们已经将整个JS语言服务移动到一个可以与Visual Studio进行通信的附属进程Node,js中。我们还合并了JavaScript和TypeScript语言服务,这意味着我们通过实现两种语言服务被同时加载来减少内存。 为了测量对内存的影响,我们在以下场景中比较了Visual Studio 2015…

0

Visual Studio”15“的内存溢出崩溃锐减

[原文发表地址]: Reduced Out of Memory Crashes in Visual Studio “15” [原文发表时间]: October 12, 2016   这是Visual Studio “15” Preview 5中关于性能改善五部分系列中的第三篇博客。前两篇博客介绍的是在Visual Studio “15”中启动更快和项目解决方案加载时间更短。 Visual Studio集多种功能于一身,数百万的开发人员都依赖于它进行高效的工作。支持如此多的功能,而且随着开发者期望的响应速度的提高,内存消耗就有所增加。然而,在Visual Studio 2015中,在某些情况下的内存使用量过大。这导致了一些不利的影响,例如内存溢出崩溃,UI反应迟缓。我们收到了大量用户对于这些问题的反馈。在VS “15”中我们正在解决这些问题,同时不会削弱Visual Studio丰富的功能和性能。 我们正在优化Visual Studio的很多功能,这篇文章介绍了三个具体领域的进展: JavaScript与 TypeScript语言服务,调试器符号文件加载,VS中的Git支持。在本文中我将对每一个测试场景比较以下两个指标,来展示我们所取得的进展: 峰值虚拟内存: Visual Studio是一个32位的应用,这意味着消耗的虚拟内存可以达到4GB。超过上限的内存分配会导致Visual Studio出现内存溢出错误(OOM)而崩溃。峰值虚拟内存是一个用来度量进程的内存将如何接近所限制的4GB的指标,或者换句话说,可以度量一个进程是如何接近崩溃的指标。 峰值私有工作集:一个包含了进程执行的代码或进程涉及的数据的虚拟内存的子集需要被放在物理内存中。“工作集”是这样的物理内存消耗的度量标准。这种工作集的一部分称作“私有工作集”,是属于一个给定进程的内存,并且是单独属于这个进程的。因为这样的内存不是进程间共享的,他们在系统上的消耗相对较高。本文的测量数据包括了Visual Studio (devenv.exe)的峰值私有工作集和相关的附属进程。   JavaScript语言服务 超过三分之一的Visual Studio开发人员定期编写JavaScript (JS),使JS语言服务成为在相当数量的Visual Studio会话中需要加载的一部分。JS语言服务提供的功能如智能感知、代码导航和一些使JS编辑高效的功能。 为了支持这种生产力特性并且确保他们响应迅速,语言服务消耗了不少的内存。内存的使用量取决于解决方案的特性、工程的数量、文件的数量以及文件大小。此外,JS语言服务通常会和另一种语言服务一起被加载,例如C#,这会增加进程的内存压力。因此,提高JS语言服务的内存占用对减少VS中内存溢出崩溃是至关重要的。 在VS “15”中,我们想要确保Visual Studio可靠性不会被JS代码造成的内存消耗而不利地影响。为了实现这个目标而不影响JavaScript的编辑体验,在VS“15” Preview 5中我们已经将整个JS语言服务移动到一个可以与Visual Studio进行通信的附属进程Node,js中。我们还合并了JavaScript和TypeScript语言服务,这意味着我们通过实现两种语言服务被同时加载来减少内存。 为了测量对内存的影响,我们在以下场景中比较了Visual Studio 2015…

0

Visual Studio “15”响应速度更快

[原文发表地址]: Improved overall Visual Studio “15” Responsiveness [原文发表时间]: October 14, 2016   这是包含Visual Studio “15” 性能提升5部分系列的最后一篇博客了。 这个系列中包含了下边的内容: · Visual Studio “15” 启动更快了 · VS“15”项目解决方案加载时间更短 · VS“15”中由于内存溢出产生的崩溃现象减少了 · VS“15”让C++工程更快 · VS “15” 响应速度更快 在这篇博客中我们会着重介绍下在VS “15” 预览版5中我们所做的一些让Visual Studio在日常使用过程中 反应更加灵敏的改进。首先,我们先讲一下在调试性能、Git源代码管理和XAML编辑方面的改进,以及怎样通过管理插件来改进你的输入体验。   调试更快速并且不会因为编辑造成延迟 在Visual studio 2005中,我们引进了WPF工程、windows窗体工程和可管理控制台项目的托管进程,通过在后台启动一个可用于下一个调试会话的进程,来使“开始调试”速度更快。该功能会导致Visual Studio在按下“停止调试”时暂时性的几秒钟内无响应或者是只能在停止调试会话之后才能使用Visual Studio。 在预览版5当中,我们关闭了托管进程,并且优化了“开始调试”,这就使得如没有托管过程一样快速,而对于从未使用过托管过程的项目(例如ASP.NET,Universal Windows和C ++)来说可能会更快。例如,下边是一些我们在测试机器上所统计的UWP照片共享应用程序、一个针对于可视化的C++应用程序和一个简单的WPF应用程序的启动时间对比图: 为了实现以上提升,我们在开始调试路径上优化了初始化诊断工具窗口和智能追踪(默认情况下会在每一个调试会话开始的时候显示)的相关时间花费。我们修改了智能追踪的初始化模式,这样的话它就可以在其他调试过程和应用启动的时候被初始化。另外,我们通过智能追踪记录和Visual Studio进程在断点处停止时的交互的方式消除了几个低效率进程。 我们还删除了几个与诊断工具窗口相关的必须在Visual Studio UI主线程上同步运行代码的后台线程。 这使得我们可以异步进行ETW事件收集,从而在重新启动调试时,不必等待旧的ETW会话完成。   Git.exe…

0

Visual Studio “15”响应速度更快

[原文发表地址]: Improved overall Visual Studio “15” Responsiveness [原文发表时间]: October 14, 2016   这是包含Visual Studio “15” 性能提升5部分系列的最后一篇博客了。 这个系列中包含了下边的内容: · Visual Studio “15” 启动更快了 · VS“15”项目解决方案加载时间更短 · VS“15”中由于内存溢出产生的崩溃现象减少了 · VS“15”让C++工程更快 · VS “15” 响应速度更快 在这篇博客中我们会着重介绍下在VS “15” 预览版5中我们所做的一些让Visual Studio在日常使用过程中 反应更加灵敏的改进。首先,我们先讲一下在调试性能、Git源代码管理和XAML编辑方面的改进,以及怎样通过管理插件来改进你的输入体验。   调试更快速并且不会因为编辑造成延迟 在Visual studio 2005中,我们引进了WPF工程、windows窗体工程和可管理控制台项目的托管进程,通过在后台启动一个可用于下一个调试会话的进程,来使“开始调试”速度更快。该功能会导致Visual Studio在按下“停止调试”时暂时性的几秒钟内无响应或者是只能在停止调试会话之后才能使用Visual Studio。 在预览版5当中,我们关闭了托管进程,并且优化了“开始调试”,这就使得如没有托管过程一样快速,而对于从未使用过托管过程的项目(例如ASP.NET,Universal Windows和C ++)来说可能会更快。例如,下边是一些我们在测试机器上所统计的UWP照片共享应用程序、一个针对于可视化的C++应用程序和一个简单的WPF应用程序的启动时间对比图: 为了实现以上提升,我们在开始调试路径上优化了初始化诊断工具窗口和智能追踪(默认情况下会在每一个调试会话开始的时候显示)的相关时间花费。我们修改了智能追踪的初始化模式,这样的话它就可以在其他调试过程和应用启动的时候被初始化。另外,我们通过智能追踪记录和Visual Studio进程在断点处停止时的交互的方式消除了几个低效率进程。 我们还删除了几个与诊断工具窗口相关的必须在Visual Studio UI主线程上同步运行代码的后台线程。 这使得我们可以异步进行ETW事件收集,从而在重新启动调试时,不必等待旧的ETW会话完成。   Git.exe…

0

Visual Studio “15” Preview 5 发布公告

[原文发表地址]: Announcing Visual Studio “15” Preview 5 [原文发表时间]: October 5, 2016   今天我们发布了Visual Studio “15” Preview 5版本。对于Preview 5版本, 我想主要介绍下性能方面的改进,在接下来的几天,我们还会有后续的博客来描述我们已经可以看到的性能提升。我打算主要说明下那些已经可以提高效率的改进点。 启动安装程序,并阅读下文,你也可以获取发布说明来了解详情。   性能与内存效率的大改进 我想根据这个并行对比视频,给你展示所有的性能改进。这个视频是比较打开 Visual Studio 并加载整个.NET 编译器平台”Roslyn”的解决方案,Visual Studio ’15’ 用时30秒,而Visual Studio 2015用时60秒。 更快的加载时间是“轻量级工程加载以及按需求扩展加载”双管齐下改进的结果。下面是一些在Preview 5中的关键性能的提升: 通过“轻量级解决方案加载”选项来缩短解决方案加载时间: 工作在超过100多个项目的解决方案中,并不意味着需要在一定时间内操作所有的文件或项目。VS “15”提供了在不需要等待所有工程加载完毕时就可编辑和调试的功能。你可以在Preview5的托管工程中尝试一下这种功能,可以通过工具-> 选项 ->项目和解决方案,勾选“轻量级解决方案加载”。 通过按需加载扩展来更快的启动:方法很简单:当需要扩展时再加载,而不是在打开VS的时候就加载。在 Preview 5中,我们开始这样做了,已经改变了Python和Xamarin扩展为按需加载,并正在改变我们提供的所有Visual Studio扩展,以及由第三方扩展供应商所提供的扩展到这种模式。想知道哪些扩展影响了启动,解决方案加载等性能呢?你可以在帮助->管理Visual Studio性能中查看这些信息。你开发过扩展吗?我们将发布指导来帮助扩展开发人员将扩展改为按需加载。 将子系统从VS主进程移动到独立进程: 我们移动了一些内存密集型任务,例如 Git 源代码管理、JavaScript 和TypeScript语言服务,以便分离进程。这就杜绝了那些较差的体验,如由于代码运行Visual Studio的程序造成的延时,或者因32位的处理器中主程序已有达到约4 GB的内存上限造成的Visual Studio变得缓慢或者崩溃。在未来的版本中,我们将继续把组件移动到进程外。 对C++项目,更快的加载项目,编码,调试: 我们可以更快的加载C++项目,查看这个显示改进的视频。你可以通过从工具->选项->文本编辑->C/C++->实验,将“启用更快的项目加载”的值设置为True来启用它。我们也改进了我们的链接器和PDB加载库,使得增量生成工程以及调试时更快,同时在调试的时候所消耗的内存也明显减少了。 使用Git、调试工程和编辑XAML代码时速度有所提升:通过从libgit2切换到git.exe,我们提高了源代码管理操作的速度。我们也通过优化初始化时间和其他与IntelliTrace相关的时间,以及诊断工具窗口,还删除了编辑XAML文件时出现的几次延迟。从而提高了调试性能。…

0