1.源生成器 (Source Generator),增量生成器 (incremental generator)是什么 --C#源生成器學習筆記1


最近在用到官方庫Community Toolkit 的時候發現了一些很有意思的功能,通過指定特性來調用 "源生成器" 自動產生代碼大大減少了重復的代碼量,感覺非常有用且有趣,研究了一下背后的原理僅以本文用來記錄和分享學習

首選要我們要知道什么是源生成器

源生成器(Source Generator) 是Net 5就引入的一個特性,旨在用來改善分析用戶代碼,產生信息或代碼

為什么是改善呢,實際我們之前在開發中就會這么干,只是更多用的是反射這種方式,比如指定一個特性A用反射找到特性A的屬性做某些操作.

呢源生成器和這么做非常類似但是不同於反射這種在運行時的操作,他是在你編譯代碼的時候,分析代碼並動態生成代碼,添加到項目中去

流程圖大概是如此

這樣顯而易見有幾個好處

1.動態產生的源代碼可見

2.避免反射開銷

大體上可以視作他是對分析器(Analyzer)的補充,增添了產生代碼這個功能

微軟官方的文檔 點這里

知道了什么是源生成器就可以了解 增量生成器

增量源生成器是Net6.0對源生成器的一個升級你也可以叫他 源生成器V2,重點是解決源生成器的性能問題

源生成器在大型項目中因為執行機制的問題導致會非常卡頓 案例點擊這里源生成器緩慢

官方的回答如下 

與V1相比改進的部分就是增量這個概念上

源生成器之前的運行模式 每次都會遍歷所有的語法樹來分析,這樣就有個問題每次可能只修改了很少一部分或者只有很少一部分的代碼需要分析

,而增量源代碼生成器可以理解為在之前的工作上做了一個篩選的動作,通過自定義的條件來過濾語法樹,並且緩存起來,避免在沒有做任何更改的情況下重復工作

 增量生成器的主要缺點也很明顯,他僅在Net 6 SDK中受到支持,換句話說只有vs 2022才能使用他

在下一章的文章中將會實際示范一個增量生成器應該怎么去寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM