前言

在以前的文章中,我们介绍过如何调试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性能问题相关推荐

  1. 轻松实现深度Clone | Source Generators方式

    前言 在开发中,我们经常需要创建某个类型实例的副本. 常用的方式,是继承ICloneable接口,然后自行实现Clone(),这会耗费一定的开发时间:或者使用序列化/反序列化方式变相实现,但是性能不高 ...

  2. 究竟是什么可以比反射还快实现动态调用?| Source Generators版

    前言 最近在公众号上看到一篇文章<究竟是什么可以比反射还快实现动态调用?>,它使用的是Newbe.ObjectVisitor,基于C#表达式树访问一个普通class的所有属性和对应的值,可 ...

  3. Source Generators实现简版AutoMapper

    问题 在业务开发中,我们常常需要将一个对象映射成另一个对象.例如将领域实体(UserEntity)映射成暴露给服务外部使用的数据传输对象(UserDto). 而AutoMapper则是目前主流的解决方 ...

  4. 在 C# 中生成代码的四种方式——包括.NET 5中的Source Generators

    Microsoft在最新的C#版本中引入了Source Generator.这是一项新功能,可以让我们在代码编译时生成源代码.在本文中,我将介绍四种C#中的代码生成方式,以简化我们的日常工作.然后,您 ...

  5. MySQL高性能实战——part3——分析SQL,定位慢SQL(性能优化的前提)

    前言: 此文借鉴<MySQL高性能>一书,还有MySQL官方文档,笔者将通过自身的一些实战经验和阅读习惯对本书进行一个总结,整理,归纳出企业级开发中常用的优化案列和部分概念!! ​ 官方文 ...

  6. 抽丝剥茧!Source Generators原理讲解

    前言 前段时间,我们已经用Source Generators实现了好多功能,比如AutoMapper.API最佳实践. 你看完那些实现代码,是不是还有点云里雾里! Source Generators到 ...

  7. Hello Blazor:(9)Source Generators生成导航菜单

    前言 最近写了多篇关于Source Generators的文章,发现它确实可以简化我们的部分开发工作. 这不,我又盯上了Blazor. 问题 默认的NavMenu.razor组件用于显示导航菜单,它的 ...

  8. .NET Core开发实战(定义API的最佳实践)Source Generators版

    前言 极客时间上的<.NET Core开发实战>是一门非常好的课程,作者肖伟宇在第31课(https://time.geekbang.org/course/detail/100044601 ...

  9. Source Generators(源代码生成器)的调试器支持 | Visual Studio 2019(16.10)新功能试用...

    开始之前 Source Generators旨在启用编译时间元编程,即可以在编译时间创建并添加到编译中的代码. 首先用一个Demo为不了解Source Generators的朋友演示一下功能.Sour ...

最新文章

  1. 计算几个数相加和为16
  2. 思科防火墙nat-control的作用
  3. DCMTK:将显示曲线导出到文本文件
  4. 18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列
  5. java 常量变量使用_java常量和变量入门教程
  6. 实验三《实时系统的移植》 20145222黄亚奇 20145213祁玮
  7. python中long类型_浅谈python 四种数值类型(int,long,float,complex)
  8. (计算机组成原理)第三章存储系统:本章习题
  9. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
  10. runtime—新手必学
  11. mysql _bin编码_mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别
  12. Android常见问题剖析
  13. c语言变量命名规则_数据的来龙去脉——常量与变量
  14. win7如何彻底清理c盘?有什么好方法推荐?
  15. python 异常 exception_关于Python中异常(Exception)的汇总
  16. 学习java和html必须要知道的英文单词(入门单词,包括C#)
  17. 使用Python实现淘宝订单定时付款
  18. 传统企业怎么通过抖音引流到微信
  19. 第十一课:磁场和洛伦兹力
  20. C/S模式和B/S模式

热门文章

  1. 请设计各种管理系统、业务系统的大哥大姐们,设计新系统时,拜托您,请允许我修改用户名、密码...
  2. 根据当月数据库自动生成下个月数据库--3
  3. Django 使用 mysql 数据库连接
  4. python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了...
  5. SQL Server 2000详细安装过程及配置
  6. Quartus prime16.0 与modelsim ae 联调
  7. #CSS# 初识CSS
  8. iOS6.0以上版本,关于NSDateFormatter的问题
  9. 【转】sqlserver游标概念与实例全面解说
  10. HDU 1856 Brave Game(巴什博奕)