简述
今天,我们很高兴的宣布在 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 以查看图片 <<
在执行这段例子代码之前,请通过下面的设置步骤确保函数是被强制内联的。
-
在解决方案管理器中,在项目上右键打开上下文菜单。
-
选择项目属性。
-
在项目属性对话框中,导航至 【C/C++】 / 【优化】。
-
在优化设置下拉框中,选择【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》