如何定位Source Generators性能问题

前言

在以前的文章中,我们介绍过如何调试Source Generators。但是当实现较为复杂时,我们需要能够快速地分析Source Generators性能的方法。

默认情况下,使用VS 2019自带的“性能探查器”不能分析Source Generators项目,因为它是类库项目:

d47479b77d6c298e00d7bd852ad3df0e.png

如果设置引用Source Generators的目标项目作为启动项目,也不行。因为“性能探查器”只能收集启动时的数据,而不是编译时,而编译时才是Source Generators实际执行的位置。

怎么办?

那就想办法启动编译指令。

获取编译指令

这时就要祭出我们在《你知道MSBuild都干了些什么》使用过的神器——MSBuild Structured Log Viewer。

生成日志后,可以看到MSBuild准备执行的所有目标,每个目标中包含多个任务。

我们浏览所有任务,最终可以定位到引用Source Generators的目标项目执行的Task Csc

e1d66c64483f3eab6e09a8f0e680a5cf.png

Csc 任务 - 包装 csc.exe,生成可执行 (.exe) 文件、动态链接库(.dll 文件)或者代码模块(.netmodule 文件) 。有关 csc.exe 的详细信息,请参阅 C# 编译器选项 。

这里的CommandLineArguments就是我们要的编译指令。

设置调试属性

打开Source Generators项目的属性窗口,设置“调试”属性:

96f88182d6747e6932f5f616eec476f5.png

  • 启动:可执行文件

  • 可执行文件Task Csc参数CommandLineArguments里的csc.exe全路径

  • 应用程序参数Task Csc参数CommandLineArguments里的csc.exe后面的全内容

  • 工作目录:引用Source Generators的目标项目所在目录

执行性能探查器

将Source Generators项目设为启动项目,然后运行“性能探查器”,勾选“CPU 使用率”,然后点击“开始”按钮。

运行完成后,在打开的报告中就可以查看Source Generators的性能瓶颈了:

13f96316ae78445e6a57c56ed2ea4a0c.png

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

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

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

相关文章

什么是域(domain)

在今天很多人都有意识或无意识的跟域这个东西打过交道。如果你在公司里使用电脑,并且你的电脑接入了公司的局域网,那你的电脑很可能就在一个域中。如何查看你的电脑是否连接到一个域中,以Windows为例,右击我的电脑 –>属性&…

四舍五入运算

为什么80%的码农都做不了架构师?>>> 请用户输入1个实数(浮点型),请编写算法对这个实数进行四舍五入到个位的运算. 例如 12.56经过四舍五入运算得到13. 而12.45经过四舍五入运算得到12 代码如下地址: http://git.oschina.net/touch1D/qf17j3eughwdp8zxi…

python 新建html_Python学习第226课——html中创建按钮

前面我们学习了一些常见的表单元素,表单就是用来收集用户的信息的,比如调查问卷、用户登录网站的页面等这类的网页,里面都要用到表单元素,当用户在前端页面上填入账号、密码、或者调查问卷的答案等等信息之后,就需要提…

WPF 实现图片切成九宫格控件~

WPF开发者QQ群: 340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS:有更好的方式欢迎推荐。接着上一篇倒计时控件01—代码如下一、创建 CropControl.cs代码如下。(修改RowColumn “…

GCT之数学公式(三角函数)

转载于:https://www.cnblogs.com/jyh317/p/3386598.html

Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别

Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,和在低速CPU上表现出的高性能,确实令人刮目相看。 依赖于底层Posix兼容的操作系统,它可以简单的…

软件与硬件我该选哪个_MacBook Air 和 MacBook Pro 该选哪个……?

一个多月前,Apple 发布了 2019 款 MacBook Air 和 MacBook Pro,经过这一次的更新之后,MacBook 产品线总算变得更加清晰了,同时也减少了之前存在的价格和定位产生冲突的现象。不过从购买决策来看,我发现还是有些问题难倒…

只要300页!火遍全网的NET6+linux知识手册!拿走不谢!

这是微软公司基于最新的.net 6编写,循序渐进地对.net6/C#10进行讲解。对于零基础可以作为.net的快速入门教材,对于高级程序员而言,这也是你的进阶之路!NO.1资料介绍该手册,全面的介绍.net6和c#的新特性,看完这个资料&a…

Linux0.11内核剖析--内核体系结构

一个完整可用的操作系统主要由 4 部分组成:硬件、操作系统内核、操作系统服务和用户应用程序,如下图所示: 用户应用程序是指那些字处理程序、 Internet 浏览器程序或用户自行编制的各种应用程序; 操作系统服务程序是指那些向用户所…

ubuntu上最使用jni最简单易懂的例子

第一步:爆结果照,让你有坚持下去的信心 二、NDK解释 NDK全称:Native Development Kit。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的m…

buck变换器设计matlab_一种用于Boost PFC变换器的改进关断时间控制策略

随着我国工业的发展,越来越多的非线性负荷接入电网,各种换流设备的使用,使电网的电压波形发生畸变,造成电能质量下降,威胁电网和各种用电设备的安全、经济运行。为了能够确保电网安全,研制出了各种PFC变换器…

你初吻啥时候没有的​?​

1 ???(素材来源网络,侵删)▼2 世界上最难受的三件事(via.惨绿少年金三坨,侵删)▼3 漏网之鱼▼4 有哪里不太对劲?(素材来源网络,侵删…

乡亲们,我们创建了 Dapr 中文交流频道

我们创建了 Dapr 中文交流 QQ 频道,欢迎大家加入!加入方式在文章最后一节。为什么要创建频道? 解决什么问题**专业性,“你可以在我们群里面钓鱼,因为都是水”** 你肯定加过非常多的这种叫什么技术交流群。你会发现这个…

Maven搭建SpringMVC+Mybatis项目详解【转】

为什么80%的码农都做不了架构师?>>> 前言 最近比较闲,复习搭建一下项目,这次主要使用SpringSpringMVCMybatis。项目持久层使用Mybatis3,控制层使用SpringMVC4.1,使用Spring4.1管理控制器,数据库…

Linux下最简单的修改文件名后缀的命令行技巧

在linux上面一直没有找到好的修改文件的方法,今天找到了一个 mv file.{cpp,c} 上面的意思就是说把文件file结尾为cpp改成c文件格式 看下图 

实时事件日志记录和聚合的平台——Sentry

不管你用什么编程语言,都会面临如何处理错误日志的问题。很多程序员对错误日志放任自流,直到出现故障了才追悔莫及,如果问小编怎么办,我会给你推荐 Sentry!什么是Sentry?无论测试如何完善的程序&#xff0c…

如何在html里加入验证码_如何把crc校验加入到对应的程序里?看高手怎么做

我们现在已经搞清楚了crc校验的算法,本文我就向大家具体讲解一下如何把crc校验加入到我们的程序里。1 、crc校验使用原理crc校验在程序中运行的原理主要可以分为以下几步。第一步:主站发送数据前把要发送的数据进行crc校验,将要发送的数据和c…