.NET平台系列18 .NET5的超強優勢


支持所有 .NET 應用程序類型

  .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)。

支持JIT與AOT兩種編譯模式

  另一個顯著差異是 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+默認http://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)

 


參考文獻:

  • https://devblogs.microsoft.com/dotnet/announcing-net-5-0/
  • https://docs.microsoft.com/zh-cn/archive/msdn-magazine/2019/july/csharp-net-reunified-microsoft%E2%80%99s-plans-for-net-5

 


免責聲明!

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



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