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


    基于 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》

     

  • 相关阅读:
    FTX:这个加密货币冬天与以前的冬天非常相似
    C#实现钉钉自定义机器人发送群消息帮助类
    2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
    Vue中使用components的使用技巧
    汇编语言与接口技术实验
    kyverno VS gateKeeper
    结合RF与1DCNN的多信息融合气温预报方法
    PyTorch深度学习实战(17)——多任务学习
    STM32F103学习笔记(9)——NB-IoT模块BC26使用
    8. 控制转义指令
  • 原文地址:https://blog.csdn.net/mmxida/article/details/127877220