簡體   English   中英

.NET 5 源發生器是什么?

[英]What are the .NET 5 Source generators?

我看到越來越多的開源庫使用 .NET 5 的源代碼生成器來提高它們的性能。

據我從文檔中了解到的,它們旨在取代System.Reflection成為它以犧牲性能為代價。 真的嗎? 我個人對源代碼生成器的了解是,當他們在 .NET 5 引入它們時,它們的目的是根據 .proto 數據合同文件生成 C# 代碼。

有一個 MediatR 的克隆庫,它使用 Source Generators 而不是System.Reflection

您能否簡化MediatR 庫和整體中源代碼生成器的好處和使用?

源代碼生成器真的沒什么神奇的——它只是一些自定義代碼,將文本生成到文件中,然后將其插入編譯過程並成為二進制文件 output(例如 DLL 或 EXE)的一部分,就好像它是手動輸入的一樣在你點擊編譯之前在一些源文件中。

這里唯一的“魔法”是分析器作為生成器的形式化概念,它使 Visual Studio 能夠自動將原始源代碼傳遞到您的自定義生成器例程中,並在您構建項目時包含 output。

源代碼生成器的一個應用是為某些需要運行時反射的操作創建專門的、類型特定的代碼。 運行時反射通常相當緩慢且占用大量 CPU,但通常需要它來集中對未知對象進行常見操作的邏輯。 一個常見的例子是對象的序列化和反序列化。 這可以通過反射(在運行時查找屬性、調用 getter 和 setter 等)或通過更快、類型特定的代碼直接引用屬性和讀取/寫入數據流來完成。 然而,為每種類型創建這樣的專用代碼是一項非常枯燥、重復的工作,因此請輸入源代碼生成器。 他們可以在構建期間進行“反射”,並將 output 苗條、快速的代碼轉換為臨時.cs 文件,這些文件與產品一起編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM