.NET平台系列18 .NET5的超強優勢
- 2021 年 6 月 9 日
- 筆記
- .NET, .NET 5, .NET:.NET Core, .NET:.NET5
.NET5 統一版本之後將支援所有 .NET 應用程式類型:Xamarin、ASP.NET、IoT 和桌面。此外,它將利用一個單獨的 CoreFX/基類庫 (BCL)、兩個獨立的運行時和運行時程式碼庫(因為很難將兩個截然不同的運行時單獨作為源)和一個工具鏈(比如 dotnet CLI)。結果將是行為、API 和開發人員體驗之間的一致性。例如,在每個不同平台上將運行一組庫,而不是三個 System.* API 實現。
.NET 的統一有很多優點。將框架、運行時和開發人員工具集統一到一個程式碼庫中,將減少開發人員(Microsoft 和社區)需要維護和擴展的重複程式碼量。此外,正如我們最近對 Microsoft 的期許,所有 .NET 5 源程式碼都將是開放源程式碼。
合併後,所有平台都可以使用每個單獨框架獨有的許多功能。例如,這些平台的 csproj 類型將統一為深受歡迎的、簡單的 .NET Core csproj 文件格式。因此,.NET Framework 項目類型將能夠利用 .NET Core csproj 文件格式。雖然 Xamarin 和 .NET Framework(包括 WPF 和 Windows 窗體)csproj 文件需要轉換為 .NET Core csproj 文件格式,但該任務類似於從 ASP.NET 轉換為 ASP.NET Core。幸運的是,得益於諸如 ConvertProjectToNETCore3 之類的工具,現在實現起來更加容易(請參閱 bit.ly/2W5Lk3D)。
另一個顯著差異是 Xamarin 和 .NET Core/.NET Framework 的運行時行為。前者使用靜態編譯模型,使用提前 (AOT) 編譯將源程式碼編譯為平台的本機源程式碼。而 .NET Core 和 .NET Framework 使用即時 (JIT) 編譯。幸運的是,在 .NET 5 中,JIT和AOT這兩種模型都將受支援,具體取決於項目類型目標。例如,可以選擇將 .NET5 項目編譯為單個可執行文件,該文件將在運行時使用 JIT 編譯器 (jitter),或使用本機編譯器在 iOS 或 Android 平台上工作。大多數項目都會利用 JIT,但對於 iOS 來說,所有程式碼都是 AOT。對於客戶端 Blazor,運行時是 Web 程式集 (WASM),Microsoft 打算 AOT 編譯少量託管程式碼(大約 100 kb 到 300 kb),而其餘程式碼將被解釋。(AOT 程式碼很大,因此網路成本是一個相當大的負擔。)
在 .NET Core 3.0 中,可以編譯到單個可執行文件,但該可執行文件實際上是運行時所需執行的所有文件的壓縮版本。在執行該文件時,它首先將自己展開到一個臨時目錄中,然後從包含所有文件的目錄中執行應用程式的入口點。相反,.NET 5 將創建一個實實在在的、可直接就地執行的單個可執行文件。
.NET 5 的另一個顯著特性是與 Java 和 Objective-C(包括 Swift)中源程式碼的互操作性。自早期版本以來,這一直是 Xamarin 的一個特性,但將擴展到所有 .NET5 項目。例如,你將能夠在 csproj 文件中包含 jar 文件,並且能夠直接從 .NET 程式碼調用 Java 或 Objective-C 程式碼。(遺憾的是,對 Objective-C 的支援可能會比 Java 晚)。 需要注意的是,.NET5 和 Java/Objective-C 之間的互操作性只針對進程內通訊。與同一台電腦上的其他進程甚至不同電腦上的進程的分散式通訊可能需要序列化為基於 REST- 或 RPC- 的分散式調用。
新的互聯網技術時代已經來臨了,容器、Kubernetes、DevOps、微服務、雲原生才是技術前進的方向,其中容器技術屬於基石。從.NET Core 誕生直到.NET5,都能持續看到平台對容器技術的官方支援和適配改進,裡面還強調了有著更小的容器鏡像。.NET5+Docker容器化後還有其他語言無可比擬的優勢!
1、體積更小
.NET5的鏡像體積都很小,alpine的鏡像更小,帶上應用程式也才80M,對於微服務分散式架構而言,更小的體積意味著更少的下載頻寬,更快的分發下載速度。
2、佔用資源更少
.NET5的CLR+默認//ASP.NET Core框架頁面啟動後,僅需22M記憶體,同比Java8已經需要120M了,運行時資源佔用也更低,意味著更高的部署密度和更低的計算成本。
3、啟動速度更快
.NET5的 CLR啟動速度非常快,而啟動速度就意味著交付效率和回滾效率,在動輒數百個副本微服務時,啟動速度就是個非常重要的特性。
4、容器感知,低配運行
.NET5 默認更好的支援Docker資源限制,官方團隊也在努力讓.NET5成為真正的容器運行時,使其在低記憶體環境中具有容器感知功能並高效運行,遠超其他平台。
.NET團隊一直將重點放在.NET5領域,並引入了新的改進和功能:
- REST API 可以更簡單地構建測試,並將其發布到諸如Azure API管理之類的應用程式中。此外,還可以在默認情況下由OpenAPI生成客戶端。
- gRPC gRPC可以構建與WCF類似的高性能基於合約的API。
- 較小,更快的微服務 .NET團隊在.NET5中完成的一件很酷的事情是,您可以選擇一個ASP .NET項目,然後選擇要發布的項目,這將生成一個20m的小型自包含應用程式,完全不需要在電腦上運行.NET。
- 使用WSL和Linux進行跨平台開發
- 高性能反向代理(YARP)
參考文獻:
- //devblogs.microsoft.com/dotnet/announcing-net-5-0/
- //docs.microsoft.com/zh-cn/archive/msdn-magazine/2019/july/csharp-net-reunified-microsoft%E2%80%99s-plans-for-net-5