VS2022 性能提升:更快的 C++ 代码索引

news2025/7/16 15:21:21

基于 Visual Studio 2022 17.3 版本的性能提升,我们在新的 17.4 版本中添加了更多的小优化,且听我慢慢道来。

不论你是一个工作在大型代码库下的游戏开发者,或者你在解决方案中有非常多的 C++ 工程,在 Visual Studio 2022 17.4 中,你都会感受到前所未有的”快”。

在 17.4 中,我们优化了 C++ 工程首次加载(冷载)下的启动时间。

当我们做这些优化的时候,我们也同时考虑这些优化措施在真实世界中的大型 C++ 工程的表现,除了测试我们自己的工程之外,我们还测试了那些比较流行的大型游戏工程。

大型 C++ 工程在填充用于浏览和导航的源代码数据库时,速度可能比 17.3 提高了 20-36%。

与 VS 2019 相比,此方案的累积性能增益应在2倍-6倍之间,具体取决于项目结构和规模。

在今天这篇文章中,我们想重点介绍《战争机器》(Gears of War)源代码和通用虚幻引擎5入门项目的C++ 工程的代码索引场景。

测试环境

硬件: AMD Ryzen(锐龙) PRO 3945WX 12/24, 128GB 内存, 2.5TB 固态硬盘, RTX 3080

工程/源代码:战争机器、虚幻引擎5入门项目、Chromium

Visual Studio:VS2019 v16.11 和 VS2022 v17.4

对于所有测试场景,我们使用了 VS 的系统事件/日志来跟踪操作的持续时间。

测试结果

让我们看看过去一年我们在这一领域为 C++ 工程所做的所有改进的累积效应。

>> 请移步至 topomel.com 查看图片 <<

在 Visual Studio 2019 16.11 中,Gears of War 大约需要6分半钟才能完全索引。在 Visual Studio 2022 17.4 中,等待索引完成只需要 2 分半钟多一点,从而将速度提高 2.5 倍。

>> 请移步至 topomel.com 查看图片 <<

在新的虚幻引擎5解决方案中编写代码时,你会看到,最新版本的 VS2022 与 VS2019 相比有了巨大的改进。在VS2019 16.11中,完全索引全新的UE5 C++解决方案需要2分半钟多一点的时间。使用 VS2022 17.4 时,将同一 UE5 解决方案完全索引现在只需 1 分钟即可提高 2.7 倍。无论你是创建新的UE5项目还是从现有存储库克隆,你的代码在17.4中都会更快地索引。

突破极限

很少有开源项目达到 Chromium 的规模,在一个 Visual Studio 解决方案中有超过 12000 个项目,因此自然而然地,它是对我们正在改进的组件进行压力测试的不可抗拒的目标。让我们看看我们是如何做到的。

>> 请移步至 topomel.com 查看图片 <<

在 Visual Studio 2019 16.11 中,Chromium 存储库大约需要31分钟才能完全索引。在 Visual Studio 2022 17.4 中,等待索引完成只需 5 分钟,速度提高了 6 倍。首次索引大型解决方案(如 Chromium 存储库)时,使用最新版本的 Visual Studio 最多可节省 26 分钟。

试试看

尽管每个人都应该看到这些方案的显着改进,但收益的大小取决于你的源代码、项目布局、代码架构等。因此,请在你的代码库中试用它,看看你的使用体验是否如这里所说的那样”快”,正所谓:光说不练假把式。

总结

我挠破了头皮也没想明白两个问题:
> 老大哥你为什么这么强?
> Chromium 有 12000 个工程?Holly席特!(战术后仰:什么叫大型 C++ 工程 !)
看来,革命还未成功,我还需努力啊。

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Visual Studio 2022 Performance: Faster C++ Source Code Indexing》

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【附源码】计算机毕业设计JAVA家装建材网

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

浅析DNS劫持及应对方案

DNS是网络连接中的重要一环&#xff0c;它与路由系统共同组成互联网上的寻址系统&#xff0c;如果DNS遭遇故障&#xff0c;“导航系统”失效&#xff0c;网络连接就会出现无法触达或到达错误地址的情况。由于的DNS重要作用及天生脆弱性&#xff0c;导致DNS自诞生之日起&#xf…

React源码解读之任务调度

React 设计体系如人类社会一般&#xff0c;拨动时间轮盘的那一刻&#xff0c;你便成了穿梭在轮片中的一粒细沙&#xff0c;角逐过程处处都需要亮出你的属性&#xff0c;你重要吗&#xff1f;你无可替代吗&#xff1f;你有特殊权限吗&#xff1f;没有&#xff0c;那不好意思&…

Autosar模块介绍:AutosarOS(5)

上一篇 | 返回主目录 | 下一篇 AutosarOS&#xff1a;错误处理、跟踪与调试&#xff08;5&#xff09;1 钩子例程2 错误处理&#xff08;ErrorHook&#xff09;3 系统启动&#xff08;StartupHook&#xff09;4 系统关闭&#xff08;ShutdownHook&#xff09;5 系统保护&#x…

【面试题】margin负值问题

margin-top和margin-left负值&#xff0c;元素向上、向左移动&#xff1b;margin-right负值&#xff0c;右侧元素左移&#xff0c;自身不受影响&#xff1b;margin-bottom负值&#xff0c;下方元素上移&#xff0c;自身不受影响&#xff1b; 1. margin top left为负数 <st…

0095 贪心算法,普利姆算法

import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; /* * 贪心算法 * 1.指在对问题进行求解时&#xff0c;在 每一步 选择中都采取最好或最优的选择&#xff0c;希望能够导致结果是最好或最优的算法 * 2.所得到的结果不一定是最优结果&…

【SSH远程登录长时间连接后容易出现自动断开的解决方案】

SSH远程登录长时间连接后容易出现自动断开的解决方案0 问题描述1 方法一1.1 打开ssh_config文件1.2 在文件中添加以下内容1.3 重启ssh2 方法二2.1 打开sshd_config文件2.2 在文件中添加以下内容2.3 重启ssh0 问题描述 使用SSH连接远程服务器的时候 报出 client_loop send disc…

时序分析 48 -- 时序数据转为空间数据 (七) 马尔可夫转换场 python 实践(下)

时序分析 48 – 时序数据转为空间数据 (七) 马尔可夫转换场 python 实践&#xff08;下&#xff09; … 接上 从MTF到图模型 从MTF中我们可以生成图 &#x1d43a;(&#x1d449;,&#x1d438;)&#x1d43a;(&#x1d449;,&#x1d438;)G(V,E) &#xff0c;节点V和时间…

Redis从理论到实战:使用Redis实现商铺查询缓存(逐步分析缓存更新策略)

文章目录一、什么是缓存二、缓存的作用三、添加商户缓存四、分析缓存更新策略1、删除缓存还是更新缓存&#xff1f;2、如何保证缓存与数据库的操作同时成功或失败&#xff1f;3、先操作缓存还是先操作数据库&#xff1f;加油加油&#xff0c;不要过度焦虑(#^.^#) 一、什么是缓存…

ThreadLocal为什么会出现内存泄漏,你真的知道吗?

目录 1 前言 2 ThreadLocal进行线程隔离的小示例 3 原因 1 前言 大家想要搞清楚这个问题&#xff0c;就必须知道内存泄漏和内存溢出的区别 内存泄漏&#xff1a;不就被使用的对象或者变量无法被回收 内存溢出&#xff1a;没有剩余的空间来创建新的对象 2 ThreadLocal进行…

Java中的字符串

&#x1f649; 作者简介&#xff1a; 全栈领域新星创作者 &#xff1b;天天被业务折腾得死去活来的同时依然保有对各项技术热忱的追求&#xff0c;把分享变成一种习惯&#xff0c;再小的帆也能远航。 &#x1f3e1; 个人主页&#xff1a;xiezhr的个人主页 java中的字符串一、简…

C++:重定义:符号重定义:变量重定义

概述&#xff1a;在上一篇我们知道 通过 #ifndef....#defin....#endif &#xff0c; 这个解决头文件重复包含的问题 C&#xff1a;重定义&#xff1a;class类型重定义_hongwen_yul的博客-CSDN博客 避免头文件的重复包含可以有效的避免变量的重复定义&#xff0c;其实不光变量…

[附源码]java毕业设计基于web旅游网站的设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

使用Docker开发GO应用程序

根据Stack Overflow的2022开发者调查&#xff0c;Go&#xff08;或Golang&#xff09;是最受欢迎和最受欢迎的编程语言之一。由于与许多其他语言相比&#xff0c;Go的二进制大小更小&#xff0c;开发人员经常使用Go进行容器化应用程序开发。 Mohammad Quanit在他的社区全能课程…

小程序vant-tabbar使用示例,及报错处理

小程序vant-tabbar使用示例&#xff0c;及报错处理1. 配置信息2. 添加 tabBar 代码文件3. 编写 tabBar 代码custom-tab-bar/index.tscustom-tab-bar/index.jsoncustom-tab-bar/index.wxml使小程序使用vant-tabbar组件时&#xff0c;遇到以下报错&#xff1a;Couldn’t found th…

Java基于springboot+vue的儿童玩具销售购物网站 多商家

爱玩儿是所有孩子的天性。尤其是在婴幼儿阶段。选择一个好的玩具&#xff0c;不仅能够让孩子玩儿的开心&#xff0c;而且有助于孩子智力的开发。很多家长在选择玩具的时候&#xff0c;不知道选择什么样的玩具。且当前玩具市场的玩具鱼目混杂&#xff0c;种类繁多&#xff0c;而…

SAR信号处理基础1——线性调频信号

关键字&#xff1a;线性调频信号&#xff0c;LFM信号&#xff0c;chirp信号&#xff0c;驻定相位原理&#xff08;POSP&#xff09;&#xff0c;泰勒展开&#xff0c;Taylor展开&#xff0c;脉冲压缩&#xff0c;匹配滤波&#xff0c;sinc&#xff0c;分辨率&#xff0c;峰值旁…

QProgressDialog.close()失败,进度条关闭感觉失败了,无法彻底关闭

开发环境&#xff1a;我是在deepin&#xff08;深度&#xff09;系统下开发的&#xff0c;在我本机上&#xff0c;一点问题也没有&#xff0c;但是我移植到了ubantu的机子上&#xff0c;就偶尔出现出个问题&#xff0c;出现了一个模态框&#xff0c;需要重启软件才能关闭。 问题…

Vue的computed和watch的区别是什么?

一、computed介绍 computed 用来监控自己定义的变量&#xff0c;该变量在 data 内没有声明&#xff0c;直接在 computed 里面定义&#xff0c;页面上可直接使用。 //基础使用 {{msg}} <input v-model"name" /> //计算属性 computed:{msg:function(){return …

【MySQL】MySQL日志系统以及InnoDB背后的技术(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…