Visual Studio 2022性能增强17.4

纳亚纳·斯里坎思

每一个新的Visual Studio版本都包括新的性能改进,使产品更快、响应更灵敏。17.4在常见场景中有一些重大改进,如在文件中查找, 分支切换,配置变化,单元测试,C++索引文件保存。我们使用GA版本中的产品遥测设置基线,在预览中运行实验以测试不同的解决方案,测量受控实验室环境中的更改以获得可重复的结果,以及狗粮每天构建以测试我们的更改。虽然您的里程数可能会有所不同,但我们相信这对每个人都有好处。下载Visual Studio 2022以查看下面的一些改进。 


在文件中查找和替换 

现在整个解决方案的文件替换速度快了3-4倍!您将看到在大型解决方案中进行批量更换的速度有了显著提高。我们通过在最近几个版本中进行增量改进来实现这一点。例如,通过避免打开修改过的文件,同时保留全局撤消功能,异步保存,最大限度地利用缓存和索引。请继续关注查找和替换体验的性能增强。 

根据我们对Preview频道中第95个百分位的测量,17.4中95%的Replace操作在8秒内完成,而17.3中通常需要25秒。 

 

图像博客

 

C++项目的更快索引 

首次打开C++项目所需的时间大大减少。在填充用于着色和智能感知的源代码索引时,大型C++项目的速度可能比17.3提高20-35%。  这些性能提升除了其他改进在上一版本中创建。   

您可以在此处阅读有关C++IDE体验性能改进的更多信息  

 

减少Git分支切换期间的解决方案重新加载 

我们将需要重新加载解决方案的分支交换机数量估计减少了80%。例如,当开发人员的更改被合并并到达主要的 分支当切换到此分支或从此分支切换时,团队的其他成员将经历解决方案重新加载。此场景不再提示重新加载解决方案,从而获得更快的分支切换体验。  

这些改进是对过去几个版本中其他改进的补充,这些改进将第95个百分位的总体分支切换时间从VS2019的约16秒减少到VS2022的约10秒。  

 

图像分支切换

 

.NET配置开关响应性 

我们解决了问题 与切换配置有关,例如在IDE中从“调试”更改为“发布”。有了这些更改,VisualStudio在进行这种切换后的响应能力大大提高。 

以前,当我们切换配置时,我们会完全删除Roslyn的项目视图,然后从头开始创建一个新视图。这将导致重新传递项目中的所有源文件。 

实际上,这个新状态与被丢弃的状态非常相似,只有一些区别。 

现在,配置交换机重用了现有的Roslyn项目,只使用配置之间的小增量进行更新。因此,Roslyn可以少做很多工作来为新选择的配置更新IDE功能,从而减少等待时间。 

下表显示了两个版本之间实现的性能改进。 

改进 17.3  17.4  增益
继承保证金  51.1秒  26.6秒  47.90% 
错误  60.3  27.8  53.90% 
CodeLens公司  128.3  38.2  70.20% 
背景任务  219.2  89.9  58.90% 

 

单元测试性能 

并行测试发现:

在具有多个测试项目的解决方案中,测试浏览器现在可以并行地发现不同测试项目中的测试。这意味着可以更快地在测试浏览器中发现和显示测试!在我们的测试中,我们看到在一个拥有150多个项目和接近300K测试的大型解决方案上(在一台拥有10个CPU内核的机器上),测试发现的完成速度是前者的两倍。 

测试运行的高效并行化:

现在,测试程序集在目标框架和体系结构之间实现了最佳并行化,从而在拥有150多个项目的大型解决方案上的测试运行速度提高了三倍。 

优化VS和测试运行程序进程之间的通信:

测试运行程序进程连接现在很快建立。这意味着测试运行中包含的每个测试程序集平均节省约1秒。这将大大加快涉及少量测试的测试运行。测试运行者和VS之间的通信也被调优为不太健谈,效率更高。这导致了显著的改进,尤其是在测试发现方面(在许多情况下,速度提高了30%)。 

 

响应式文件保存 

我们将大多数保存操作移到了后台线程,使Visual Studio能够在保存文档时保持响应。在处理速度较慢的硬盘、网络共享或编辑超大文件时,这种增强最为明显。 

 

告诉我们你的想法! 

 我们希望这些性能增强能够使您的开发工作高效而愉快。像您这样的开发人员的反馈对于我们改进产品并满足您的期望非常重要。我们欢迎您在本博客帖子的评论部分提供反馈。c另请联系我们这个开发人员社区或通过调查。

28条评论

讨论结束。登录以编辑/删除现有评论。

  • 尤金·伊万诺夫 0

    创建新的T-SQL查询(右键单击数据库->新建查询)会挂起VS。这是一个长期存在的错误。

    • 塞尔坎·奥兹坎 0

      然而,新的更新打乱了NetCore项目。他们不再装货了。新NetCore项目正在创建,但自2天以来无法添加或显示到尝试解决的项目中!

      • 迈克尔·泰勒 0

        @Serkan,你读过关于VS发布的博客帖子吗?新产品存在问题。NET 7 SDK出错。NET 6应用程序。如果你参考了那篇博客文章,这里有一些关于如何恢复的建议,以及一些指向反馈项目的链接,如果你落入了这条船上,还有其他建议。

  • 穆罕默德·米夫塔 2

    VisualStudio的UI仍然非常慢。VS使用的底层WPF仍然是常规的。NET框架一。我的意思是,MS已经将C++/CLI移植到了。NET核心至少在Windows上;为什么VS仍然使用。NET框架的WPF?

    解决方案的完成仍然非常缓慢。Rider在几毫秒内关闭了一个解决方案,但VS仍然手动“卸载”每个项目,并且可能需要一整分钟来关闭一个包含20多个已加载项目的sln。

    在调试和常规代码编辑视图之间切换仍然需要几秒钟的时间。有时,即使在一个简单的hello world控制台应用程序上,点击重新启动调试按钮也会使VS挂起几秒钟。

    • 阿杰·维杰瓦尔吉亚 2

      我同意这一点。所有这些操作都非常慢。我希望VC6(是的,VC6)的性能/速度能恢复到最新的水平。CPU比VC6快100倍,但VS比VC6慢10倍!

    • 达米安·霍尔鲍尔 0

      是的,我同意。。很明显,在lsat更新中,文本edtior的打字速度变得非常慢。不得不回滚到17.4

      最后,在BEGGED之后,我得到了surface pen的修复,在记事本中可以拖放,在调试期间选择一些代码并拖放它,这非常重要。你经常只是把一行代码向上移动或做其他事情。我从来不想触摸热键盘,我想使用平板电脑,触摸更多。。我喜欢surface laptiop工作室,因为开发androind没有其他选择。。这支笔在处理菜单或发现可变值或费用时非常痛苦,它可能会令人惊叹。我不能在嵌套菜单中使用它。。它的grea rbut需要更多关注。我不会用它来写代码tho。它太慢了,而且我很喜欢。。但对于调试来说,使用菜单、绘图、CAD,选择其很棒。编辑需要工作,按钮需要有用。

      所以,尽管有这个修正,我还是第一次不得不回到17.4,在我回到17.5之后,打字变得非常慢……你在这方面没有竞争。但你会…除非你把这个低垂的水果修好。。到目前为止,我感到惊讶和印象深刻,我以前没有必要回头。。一般来说,它是稳定的、可用的,并且会变得更好。但上周必须解决。。性能的回归。。我关掉了副驾驶和我能想到的所有东西……但智能感或其他东西变得超级O(N^2)复合物或其他东西,而且它无法打字。

      我很高兴在Net 7上搜索代码/功能,我认为它通常速度快、稳定、可用。(比VS代码更慢)

      直到,是
      它会泄露应用程序。。如果取消带有未处理异常的调试会话。代码功能搜索有着巨大的潜力,最好的命令行和臃肿的用户界面。。笔耳按钮应该可以映射到键或类似undo的命令。。默认情况下。销售更多曲面!!!!2500美元,我别无选择,否则我会买一台mac……理想情况下,我想要一个表面ARM,但不会花2500美元!!!作为一台备份电脑来开发本机androind等。没有热键盘。

      当我重建一个泄露的应用程序时,很难找到并杀死它,文件被锁定了。。我现在在Microsoft Visual Studio Community 2022上。。它回归了上一次更新,现在是2022年11月28日。。
      版本17.4.0预览版6.0
      VisualStudio.17.预览/17.5.0-pre.1.0+33103.201
      微软。NET框架
      版本4.8.09032

      已安装版本:社区

      Visual C++2022 00482-90000-00000-AA007
      Microsoft Visual C++2022

      ADL工具服务提供商1.0
      此包包含Data Lake工具使用的服务

      ASA服务提供商1.0

      ASP。NET和Web工具17.4.318.48533
      ASP。NET和Web工具

      Azure应用程序服务工具v3.0.0 17.4.318.48533
      Azure应用程序服务工具v3.0.0

      用于Visual Studio 2.6.5000.0的Azure数据湖工具
      用于Visual Studio的Microsoft Azure数据湖工具

      Azure功能和Web作业工具17.4.318.48533
      Azure功能和Web作业工具

      用于Visual Studio 2.6.5000.0的Azure流分析工具
      用于Visual Studio的Microsoft Azure流分析工具

      C#工具4.4.0-3.22518.13+7856a68c109b22de70e07580018fec601e944f46
      IDE中使用的C#组件。根据您的项目类型和设置,可能会使用不同版本的编译器。

      通用Azure工具1.10
      提供供Azure Mobile services和Microsoft Azure Tools使用的通用服务。

      可扩展性消息总线1.4.1(主@2ee106a)
      为松散耦合的Visual Studio扩展组件通信和集成提供通用的基于消息的MEF服务。

      Microsoft Azure配置单元查询语言服务2.6.5000.0
      用于Hive查询的语言服务

      Microsoft Azure流分析语言服务2.6.5000.0
      Azure流分析的语言服务

      Microsoft Azure Tools for Visual Studio 2.9
      支持Azure云服务项目

      Microsoft JVM调试器1.0
      支持将Visual Studio调试器连接到与JDWP兼容的Java虚拟机

      Visual Studio 17.4.19的单声道调试(8c0a575)
      支持使用Visual Studio调试Mono进程。

      Node.js Tools 1.5.40817.1提交哈希:66443775f9f3b1d8f8fee47af5002828b346688d
      添加了对在Visual Studio中开发和调试Node.js应用程序的支持

      NuGet包管理器6.4.0
      Visual Studio中的NuGet包管理器。有关NuGet的更多信息,请访问网址:https://docs.nuget.org/

      剃刀(ASP.NET内核)17.0.0.2246202+61cc048d36a3fc9246d2f04625988b19a18ab8f0
      为ASP提供语言服务。NET核心剃须刀。

      SQL Server数据工具17.0.62207.28050
      Microsoft SQL Server数据工具

      增压测试适配器。测试1.0
      启用Visual Studio的测试工具,其中包含为Boost编写的单元测试。测试。扩展安装目录中提供了使用条款和第三方通知。

      谷歌测试1.0测试适配器
      启用Visual Studio的测试工具,其中包含为Google测试编写的单元测试。扩展安装目录中提供了使用条款和第三方通知。

      工具WindowHostedEditor 1.0
      将json编辑器托管到工具窗口中

      TypeScript工具17.0.10921.2001
      用于Microsoft Visual Studio的TypeScript工具

      Visual Basic工具4.4.0-3.22518.13+7856a68c109b22de70e07580018fec601e944f46
      IDE中使用的Visual Basic组件。根据您的项目类型和设置,可能会使用不同版本的编译器。

      Visual F#工具17.4.0-beta.22512.4+525d5109e389341bb90b144c24e2d1ceec91e7b
      Microsoft Visual F#工具

      Visual Studio IntelliCode 2.2
      AI支持的Visual Studio开发。

      VisualStudio。设备日志1.0
      我的包裹信息

      VisualStudio。Mac 1.0版
      用于Visual Studio的Mac扩展

      VSPackage扩展1.0
      VSPackage Visual Studio扩展详细信息

      香豆素17.4.0.293(d17-4@铁8fe1a)
      支持开发Xamarin.iOS和Xamarin.Android的Visual Studio扩展。

      Xamarin Designer 17.4.0.138(远程/原点/d17-4@d36bba3cc9)
      用于在Visual Studio中启用Xamarin Designer工具的Visual Studio扩展。

      Xamarin模板17.4.2(c457c97)
      使用Xamarin和Xamarin.Forms构建iOS、Android和Windows应用程序的模板。

      Xamarin.Android SDK 13.1.0.1(d17-4/13ba222)
      Xamarin.Android引用程序集和MSBuild支持。
      单声道:a96bde9
      爪哇。互操作:xamarin/java.Interop/d17-4@fcc33ce2
      SQLite:xamarin/SQLite/23e1ae7时为3.39.3
      Xamarin.Android工具:Xamarin/Xamarin-Android-Tools/主@0be567a

      Xamarin.iOS和Xamarin.Mac SDK 16.0.0.335(8ac10db63)
      Xamarin.iOS和Xamarin.Mac引用程序集和MSBuild支持。

  • 雅罗斯·阿夫·贾辛斯基 4

    17.3非常稳定和快速。但是17.4太慢了,我不得不关闭“后台代码分析”。

    • 雨果·里贝罗

      17.3在我看来并不快。代码分析速度很慢,并且会大量挂起CPU。
      进程ServiceHub。RoslynCodeAnalysisService.exe总是很忙(在10%到20%之间),即使我写这些行,Visual Studio也不在前台。
      这是最需要改进的领域!

      • 迈尔斯·默克尔 1

        VS 2022对RAM有着强烈的需求。我的每个项目都使用1.5GB到2GB或RAM,如果我尝试打开第二个项目,RAM的使用率会被推到接近100%(我的机器只有16GB),那么磁盘上的虚拟RAM就会被使用,使我的机器无法使用。

        • WM Z(WM Z) 1

          我花了几个小时才发现问题,最终我发现这是VS的错。这是与上述ServiceHub不同的另一个故事。RoslynCodeAnalysisService.exe。

          内存泄漏位于VS的WPF部分,该部分无法释放代码文档窗口所消耗的资源。
          由于每个文档窗口都与Roslyn代码树有一些联系,因此最终会在VS实例中有数以百万计的语法节点未发布。这就是它胃口这么好的原因。

          • 达米安·霍尔鲍尔 0

            cna你刚刚终止服务?还是冷静的现场分析?我试过了,但没有用…

            当构建目标被锁定一段时间后,我会尝试终止很多服务。。很难看到是谁锁定了我的exe…

      • WM Z(WM Z) 0

        作为一名跟踪VS新版本的扩展开发人员,我发布了关于ServiceHub的问题。RoslynCodeAnalysisService.exe在17.4公开发布之前,一个月前,他们发现问题的速度太慢,尽管有问题,但还是发布了版本。
        据说该修复程序已于两周前实施,但目前尚未发布。

        现在他们是我们环境破坏舰的一部分。

    • 达米安·哈尔鲍尔 0

      我认为17.5的速度太慢了,无法输入,并尝试了实时代码分析。。off…mabye我错过了那个场景,如果它不同的话。。回滚到17.4对我来说可以…

  • 迪安·瑞格利 0

    升级到17.4.1,现在间歇性无法运行单元测试,因为测试资源管理器声称在运行构建后找不到任何测试,即使我可以看到测试资源管理程序窗口中加载的所有测试,以及它在顶部的烧瓶按钮中找到的总测试。在前几天,我终于做了一些事情,让测试在构建后被发现,但今天它说0测试,无论我做什么。我要卸载并安装一个早期版本。

    • Abhitej约翰·班迪Microsoft员工 0

      谢谢你联系迪恩。我们已经发布了17.4.2中类似症状的修复程序。可能还有其他一些与xunit/nunit版本相关的案例可能会导致其中一些问题。如果您正在使用这些测试框架,您介意升级到适配器的最新版本并尝试一下吗?我们正在积极处理的另一个可能导致这一情况的反馈正在被跟踪在这里它与在本地化的VS实例上运行测试有关。如果你能让我们知道这两个项目中的任何一个是否符合你的设置,我们将不胜感激。如果没有,您介意通过向我们提供更多信息吗提交反馈请加入开发者社区?

  • 阿杰·维杰瓦尔吉亚

    考虑一下什么是开发者的面包黄油:
    *代码编写和编辑–有时编辑器会冻结,失去焦点,击键无处可去。
    *调试–必须非常高效–我们不是来调试VS并向您报告问题的。我们使用VS来调试我们的程序!
    *正在保存文件很快–感谢您的帮助,让我们看看它现在的效率有多高(希望它不会将焦点从编辑器转移到no-where)
    *代码浏览必须非常好、快速和准确!

    查找和替换、分支切换等都很好,但IMO不应优先于开发人员经常执行的上述任务。我知道,可以等待一个缓慢的替换或git-branch交换机

    • 基思·科尔瑟 0

      SSIS扩展?

      • 阿杰·维杰瓦尔吉亚 0

        你的回复是否正确?

    • 达米安·哈尔鲍尔 0

      我认为Git在开发工作室中风险太大。。我损失了大量的工作,因为我在UI中“标记”了一个操作,它在没有警告的情况下编辑了我的更改。我使用tourite和文件管理器进行大提交。。这更好,但准备一个文件应该是一笔触摸或点击。。它希望默认提交所有内容。它的llcleaner,但应该注意的是,在两台pc上工作时,actaulluy会拉、合并并推到顶部或defualt分支。。我很容易从其他电脑上攻击我自己的技术。修复东西,然后简单地提交推送。。pc B修复内容、拉入、合并、解决、提交推送。。pc。A。从B中提取修复。(合并),应该是conflicts…修复并查看新代码。(我不知道)它在哪里。。所以现在我不拉/合并我拉/重设基/快速跳转…相反。。它的作品。我不知道该怎么做,我也不想尝试。

      或者说清楚。现在我必须拉,快速换基,推。。否则它将猛烈抨击更改。。至少在乌龟身上。。我甚至不敢在VS中尝试。Merge应该合并Merge..和分支,或不同“HEADs”或其他……默认情况下不应该发生。对于小型团队来说,Subversion要容易得多。我认为我的本地提交不值得任何东西。无论怎样,我都会在代码运行后立即将其推送到云上。因为SSD随时都可能死亡。我只希望云上有一个分支,除非我明确定义了一个分支。你克隆到的每台电脑都有自己的类型“head”或wahtever。。或基础。。这很令人困惑。如果我想看历史,我会做一个分支,提交并推动。。当地历史对我来说毫无用处。我不会承诺,也不会推动。那台笔记本电脑被偷了,不见了。我讨厌吃零食。可怕而原始。在我的电脑上查看一个文件(来自vault)的更改历史应该很容易。。一点也不…。

      在git hub web中是这样的。指责并没有那么有用。无论是在乌龟还是在乌龟,我都不能忍受日期的折磨,我也不会像1994年那样学习cmd系列

      • 纳亚纳·斯里坎思Microsoft员工 0

        你好Damian,

        感谢您的反馈。你能打开一个吗反馈单用清晰的步骤和录像重现问题?

  • 杰森·巴金斯基 0

    如果事情真的成功了,这将是一个好消息。从17.4(包括.1)开始,由于以下原因,我每天不得不退出并重新启动十几次VS,这让我很沮丧https://github.com/dotnet/roslyn/issues/65064已经花了一年多的时间处理查找和替换问题,决定切换到“当前文档”而不是“选择”(我现在被告知比赛条件已经找到,可能会在2023年2月发布)。说真的,你可以想多快就多快,但如果这意味着我必须不断地重复检查字段并重新启动VS,那么这对我的生产力是一个巨大的负面影响,只会对产品产生不良影响。

  • 杰佛逊·莫塔 0

    我不知道你的情况,但这最后一次更新使查找文件慢了5倍。更换所有解决方案需要很长时间。我的电脑速度很快,但这次更新失败了。

  • 吉西德克 0

    仍然怀念Interactive C#与.net6/.net7的较量——从现在起,我们几乎都是从迁移过来的。NET 4.6,C#交互几乎毫无用处…。

  • 埃利·布莱克 2

    这里有很多不错的性能改进!在分支之间和分支之间切换时会加速。NET配置特别受欢迎🙂

  • 最小二乘法 0

    `通过避免打开修改过的文件,同时保留全局撤消功能,这是什么?什么是不打开文件的全局撤消?这是新东西吗?作为一个Vsixer(VS扩展器),我确实需要这个功能,在那里我可以阅读如何在VSIX中使用它?!)

    • 奥列格·特卡琴科Microsoft员工 0

      实际上它并不新鲜,它也被称为“链接撤消”,您可以通过以下方式使用它IVsLinkedUndoTransactionManager服务。

  • 埃里克·蒂塞尔 0

    我觉得VS17.4.2速度慢,挂起很多,菜单经常停止响应:我可以单击菜单行和任何列表中的选项,但有时单击后它会停止执行任何操作。偶尔我只能通过从任务管理器中删除VS来关闭它(菜单->文件->退出,Alt+F4,右上角的X–没有任何响应)

反馈usabilla图标