如何定位Source Generators性能问题
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何定位Source Generators性能问题相关的知识,希望对你有一定的参考价值。
前言
在以前的文章中,我们介绍过如何调试Source Generators。但是当实现较为复杂时,我们需要能够快速地分析Source Generators性能的方法。
默认情况下,使用VS 2019自带的“性能探查器”不能分析Source Generators项目,因为它是类库项目:
如果设置引用Source Generators的目标项目作为启动项目,也不行。因为“性能探查器”只能收集启动时的数据,而不是编译时,而编译时才是Source Generators实际执行的位置。
怎么办?
那就想办法启动编译指令。
获取编译指令
这时就要祭出我们在《你知道MSBuild都干了些什么》使用过的神器——MSBuild Structured Log Viewer。
生成日志后,可以看到MSBuild准备执行的所有目标,每个目标中包含多个任务。
我们浏览所有任务,最终可以定位到引用Source Generators的目标项目执行的Task Csc
:
Csc 任务 - 包装 csc.exe,生成可执行 (.exe) 文件、动态链接库(.dll 文件)或者代码模块(.netmodule 文件) 。有关 csc.exe 的详细信息,请参阅 C# 编译器选项 。
这里的CommandLineArguments就是我们要的编译指令。
设置调试属性
打开Source Generators项目的属性窗口,设置“调试”属性:
启动:可执行文件
可执行文件:
Task Csc
参数CommandLineArguments里的csc.exe全路径应用程序参数:
Task Csc
参数CommandLineArguments里的csc.exe后面的全内容工作目录:引用Source Generators的目标项目所在目录
执行性能探查器
将Source Generators项目设为启动项目,然后运行“性能探查器”,勾选“CPU 使用率”,然后点击“开始”按钮。
运行完成后,在打开的报告中就可以查看Source Generators的性能瓶颈了:
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“
以上是关于如何定位Source Generators性能问题的主要内容,如果未能解决你的问题,请参考以下文章
折腾了半天的linux generators上编译报错问题定位
究竟是什么可以比反射还快实现动态调用?| Source Generators版
Source Generators实现简版AutoMapper