VS2022 17.8: Build Insights 中的函数视图

简述

今天,我们很高兴的宣布在 Visual Studio 中为 Build Insights 新增了一项新功能:函数视图(Functions View)。

此功能在 Visual Studio 2022 v17.8 版本中可用。函数视图可以为你的代码库中的函数和强制内联(Forceinlines)提供更加具有深度的洞察力。

我们衷心感谢开发者社区,特别是我们的游戏工作室合作伙伴,他们积极地提供了使用反馈,您的贡献对于塑造这一新功能非常宝贵。

如果你希望了解更多关于 Build Insights 的信息,或者希望体验其它的子功能,例如 Included Files 和 Include Tree Views,可以移步至之前我们 7 月份的博客文章。

在函数视图中了解代码生成中的细节

函数视图是一个功能强大的工具,它通过分析代码生成时间和强制内联来显示每个函数对总生成时间的影响。通常用于提高运行时效率的强制内联也会影响工程的总体构建时间。

下面的代码来自 Aras Pranckevičius 一篇公开文章。我们将使用它来向你展示如何使用 Functions View 来优化构建过程。如果你也想做这个小实验,可以先在 Visual Studio 中创建一个 C++ 控制台应用程序并复制以下例子代码到源文件中。

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

在执行这段例子代码之前,请通过下面的设置步骤确保函数是被强制内联的。

  1. 在解决方案管理器中,在项目上右键打开上下文菜单。

  2. 选择项目属性。

  3. 在项目属性对话框中,导航至 【C/C++】 / 【优化】。

  4. 在优化设置下拉框中,选择【Maximum Optimization (Favor Speed) (/Ox)】。

最后,在构建菜单中,选择 【Run Build Insights on Solution】 并选择 【Build】。下图展示了 Build Insights 中生成的构建报告。

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

工程的总体构建时间是 7.342 秒。main 函数包括【

forceinlinedsampleFunDecomposition】函数的 8 个实例,这极大地影响了 main 函数的大小。

若要减轻生成时的影响,请从【sampleFunDecomposition】函数中删除__forceinline,并观察对生成时的影响。

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

现在,我们再次执行 Build Insights,可以看到构建时间得到了明显的改善。

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

通过从【sampleFunDecomposition】中删除__forceinline,构建时间从 7.342 秒缩短到 0.251 秒,比原始时间缩短了 97%!

接下来

我们正在快速迭代,致力于为您提供更多价值。预计在下一版本中会出现以下情况:

> 为清楚起见,【Time】列将被重命名为【Contribution】。

> 添加了一个新的列【Forceinline Count】。

> forceinline 指标的聚合:在扩展函数时,将对 forceinlines 进行分组。

> 引入【工具原点】(Tool origin),用来指示代码生成发生的位置。

> 添加文件路径列和导航:它将显示每个 forceinlined 函数的文件位置,以便于导航,并可选择转到源文件。

> 添加一个新的列【Duration】,在不考虑并行操作的情况下反映构建时间。

总结

如果你正在开发一个大型工程,Build Insights 将会是你用来优化构建时间的利器。

如果编译一个工程动辄就需要 30 分钟以上的构建时间,这就不可避免的降低工作效率。

毕竟,生命中的时间是如此重要,我无法容忍时间花在这上面。

最后

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

本文来自:《Functions View for Build Insights in Visual Studio 2022 17.8》

相关推荐
Clockwiseee6 小时前
php伪协议
windows·安全·web安全·网络安全
唐宋元明清21888 小时前
.NET 阻止系统睡眠/息屏
windows·电源
yylの博客10 小时前
Windows通过git-bash安装zsh
windows·git·bash·zsh
进击的code10 小时前
windows 下使用WLS2 编译aosp Android14并刷机到pixle 5a
windows
染指111013 小时前
50.第二阶段x86游戏实战2-lua获取本地寻路,跨地图寻路和获取当前地图id
c++·windows·lua·游戏安全·反游戏外挂·游戏逆向·luastudio
dntktop14 小时前
Converseen:全能免费批量图像处理专家
windows
Amd79416 小时前
PostgreSQL 的历史
postgresql·开源软件·计算机科学·软件开发·关系型数据库·数据库技术·数据库历史
一个懒鬼16 小时前
Windows脚本清理C盘缓存
windows·缓存
蚁景网络安全17 小时前
Cobalt Strike 4.8 用户指南-第十四节 Aggressor 脚本
windows·microsoft
Camllia3717 小时前
电脑运行库DirectX出问题怎么办?
windows·经验分享·电脑