最近在用到官方库Community Toolkit 的时候发现了一些很有意思的功能,通过指定特性来调用 "源生成器" 自动产生代码大大减少了重复的代码量,感觉非常有用且有趣,研究了一下背后的原理仅以本文用来记录和分享学习
首选要我们要知道什么是源生成器
源生成器(Source Generator) 是Net 5就引入的一个特性,旨在用来改善分析用户代码,产生信息或代码
为什么是改善呢,实际我们之前在开发中就会这么干,只是更多用的是反射这种方式,比如指定一个特性A用反射找到特性A的属性做某些操作.
呢源生成器和这么做非常类似但是不同于反射这种在运行时的操作,他是在你编译代码的时候,分析代码并动态生成代码,添加到项目中去
流程图大概是如此
这样显而易见有几个好处
1.动态产生的源代码可见
2.避免反射开销
大体上可以视作他是对分析器(Analyzer)的补充,增添了产生代码这个功能
微软官方的文档 点这里
知道了什么是源生成器就可以了解 增量生成器
增量源生成器是Net6.0对源生成器的一个升级你也可以叫他 源生成器V2,重点是解决源生成器的性能问题
源生成器在大型项目中因为执行机制的问题导致会非常卡顿 案例点击这里源生成器缓慢
官方的回答如下
与V1相比改进的部分就是增量这个概念上
源生成器之前的运行模式 每次都会遍历所有的语法树来分析,这样就有个问题每次可能只修改了很少一部分或者只有很少一部分的代码需要分析
,而增量源代码生成器可以理解为在之前的工作上做了一个筛选的动作,通过自定义的条件来过滤语法树,并且缓存起来,避免在没有做任何更改的情况下重复工作
增量生成器的主要缺点也很明显,他仅在Net 6 SDK中受到支持,换句话说只有vs 2022才能使用他
在下一章的文章中将会实际示范一个增量生成器应该怎么去写