欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET9?AOT部署方案詳解

 更新時間:2025年01月23日 09:27:18   作者:青春似雨后霓虹  
文章詳細介紹了.NET?AOT(Ahead-of-Time)和JIT(Just-in-Time)兩種編譯和部署方式的對比,包括它們的優(yōu)點和缺點,AOT適合快速啟動、內(nèi)存占用低、性能穩(wěn)定的場景,這篇文章主要介紹了.NET9?AOT部署,需要的朋友可以參考下

概念

AOT是Ahead-of-Time的縮寫,AOT是將C#程序提前編譯為機器代碼(通常為平臺特定的二進制文件),在應用程序啟動之前完成編譯過程。

微軟官方文檔是這樣說的

將應用程序發(fā)布為本機 AOT 會生成一個自包含的應用程序,并且已提前 (AOT) 編譯為本機代碼。原生 AOT 應用程序具有更快的啟動時間和更小的內(nèi)存占用。這些應用可以在未安裝 .NET 運行時的計算機上運行。
原生 AOT 的優(yōu)勢對于具有大量已部署實例的工作負載(例如云基礎(chǔ)設施和超大規(guī)模服務)最為明顯。.NET 8 添加了對本機 AOT 的 ASP.NET Core 支持。
本機 AOT 部署模型使用預先編譯器在發(fā)布時將 IL 編譯為本機代碼。本機 AOT 應用程序在應用程序運行時不使用實時 (JIT) 編譯器。本機 AOT 應用程序可以在不允許 JIT 的受限環(huán)境中運行。本機 AOT 應用程序以特定的運行時環(huán)境為目標,例如 Linux x64 或 Windows x64,就像發(fā)布自包含應用程序一樣。

C# AOT部署和JIT部署兩種不同的編譯和部署方式對比

AOT(Ahead-of-Time)部署:

AOT是將C#程序提前編譯為機器代碼(通常為平臺特定的二進制文件),在應用程序啟動之前完成編譯過程。

優(yōu)點:

  • 啟動速度快:由于已經(jīng)提前編譯成機器代碼,應用程序可以直接執(zhí)行,減少了啟動時的編譯延遲。
  • 內(nèi)存占用低:不需要在運行時為JIT編譯分配額外內(nèi)存,避免了JIT編譯過程中可能的內(nèi)存開銷。
  • 跨平臺支持:AOT編譯后,可以生成特定平臺的本地代碼,能夠更好地支持跨平臺部署。
  • 安全性:由于所有的代碼已經(jīng)提前編譯為機器代碼,JIT編譯的潛在安全風險(如代碼注入等)較少。
  • 性能穩(wěn)定:AOT編譯會優(yōu)化代碼,尤其適用于性能要求嚴格的場景,能夠提供更穩(wěn)定的執(zhí)行性能。

缺點:

  • 編譯時間長:AOT需要在部署前進行編譯,可能導致部署的時間較長。
  • 平臺依賴:AOT編譯會生成特定平臺的機器碼,因此跨平臺部署需要針對每個平臺生成不同版本的代碼。
  • 靈活性較低:JIT可以根據(jù)運行時的環(huán)境和數(shù)據(jù)進行動態(tài)優(yōu)化,而AOT在編譯時就決定了優(yōu)化策略,缺乏運行時調(diào)整的靈活性。

JIT(Just-in-Time)部署:

JIT是在應用程序運行時將中間語言(IL)編譯為機器代碼,編譯過程是動態(tài)發(fā)生的。

優(yōu)點:

  • 快速開發(fā):JIT編譯能夠即時將中間語言編譯為本地代碼,因此可以更靈活地進行開發(fā)和調(diào)試。
  • 跨平臺支持:通過運行時環(huán)境(如.NET Core或Mono),JIT可以支持多平臺的代碼編譯,而不需要為每個平臺單獨編譯。
  • 運行時優(yōu)化:JIT可以根據(jù)應用程序的運行環(huán)境和具體數(shù)據(jù)動態(tài)生成優(yōu)化的機器代碼,可能會實現(xiàn)更高的性能,尤其是在具有不同負載的應用場景下。
  • 更高的靈活性:JIT可以在運行時處理平臺和硬件特性,為應用程序生成最合適的代碼。

缺點:

  • 啟動時間慢:JIT編譯需要在運行時將代碼編譯為機器代碼,因此啟動速度較慢,特別是在初次運行時。
  • 額外內(nèi)存開銷:JIT編譯需要在內(nèi)存中保存編譯生成的機器代碼,這可能導致內(nèi)存占用較高。
  • 性能波動:由于JIT編譯是在運行時進行的,可能導致執(zhí)行過程中存在性能波動,尤其是在復雜的代碼路徑上。

總結(jié):

  • AOT部署適用于需要快速啟動、內(nèi)存占用較低、性能要求穩(wěn)定的場景,例如嵌入式設備或資源受限的應用。它的主要缺點是編譯時間較長以及缺乏運行時優(yōu)化的靈活性。
  • JIT部署適用于需要較高靈活性、支持多平臺和快速開發(fā)的場景,它能動態(tài)優(yōu)化性能,但啟動時間較長,并可能帶來額外的內(nèi)存開銷。

選擇AOT還是JIT部署,需要根據(jù)具體的應用場景、性能需求、開發(fā)周期和平臺要求來權(quán)衡。

實操

創(chuàng)建一個解決方案,創(chuàng)建兩個控制臺項目,一個啟用AOT,一個不啟用

未啟用AOT的csproj文件內(nèi)容

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

啟用AOT的csproj文件內(nèi)容

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishAot>true</PublishAot>
    <InvariantGlobalization>true</InvariantGlobalization>
  </PropertyGroup>
</Project>

通過對比可以發(fā)現(xiàn)就這個配置 <PublishAot>true</PublishAot>啟用AOT

參考官方文檔:

https://learn.microsoft.com/zh-cn/dotnet/core/deploying/native-aot/?tabs=windows%2Cnet8

AOT部署一般要在csproj增加如下配置

 <PublishAot>true</PublishAot>
 <IsAotCompatible>true</IsAotCompatible>
 <StripSymbols>false</StripSymbols>
 <PlatformTarget>x64</PlatformTarget>
  • <PublishAot>true</PublishAot> 此屬性在發(fā)布期間啟用本機 AOT 編譯
  • <IsAotCompatible>true</IsAotCompatible> 該屬性用于指示庫是否與本機 AOT 兼容
  • <StripSymbols>false</StripSymbols> 調(diào)試文件對于在調(diào)試器下運行應用程序或檢查故障轉(zhuǎn)儲是必需的。在類 Unix 平臺上,將該屬性設置為在本機二進制文件中包含調(diào)試信息。包含調(diào)試信息會使本機二進制文件更大
  • <PlatformTarget>x64</PlatformTarget> 目標平臺內(nèi)容是AnyCPU、x86、x64、ARM32、ARM64,一般選擇x64/AnyCPU即可,其它平臺看場景

發(fā)布到Win系統(tǒng)的AOT

發(fā)布命令參考:

https://learn.microsoft.com/zh-cn/dotnet/core/deploying/ready-to-run

https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet-publish

1.直接使用VS進行發(fā)布

2.使用dotnet命令

使用cmd進入到在csproj文件夾目錄,執(zhí)行dotnet命令

dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

發(fā)布到Liunx系統(tǒng)的AOT

如果直接在VS 2022上發(fā)布到Liunx的AOT部署會報下面錯誤
Cross-OS native compilation is not supported.

1、在 os-linux-ubuntu-2204 上安裝 .NET SDK 或 .NET 運行時

使用包管理器安裝

參考文檔:

https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntu-install?tabs=dotnet9&pivots=os-linux-ubuntu-2204

添加存儲庫

sudo add-apt-repository ppa:dotnet/backports

安裝SDK

sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-9.0

安裝運行時

#ASP.NET Core 運行時
sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-9.0
#.NET 運行時
sudo apt-get install -y dotnet-runtime-9.0

使用腳本安裝

參考文檔
https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual#scripted-install

# 通過 wget 下載腳本
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
#可執(zhí)行文件運行的權(quán)限
chmod +x ./dotnet-install.sh

此腳本默認安裝最新的長期支持 (LTS) SDK 版本,即 .NET 8。 若要安裝最新版本(可能不是 (LTS) 版本),請使用 --version latest 參數(shù)。

./dotnet-install.sh --version latest
# 若要安裝 .NET 運行時而非 SDK,請使用 --runtime 參數(shù)。
./dotnet-install.sh --version latest --runtime aspnetcore
# 可以通過 --channel 參數(shù)更改特定主要版本來指示特定版本。 以下命令安裝 .NET 9.0 SDK。
./dotnet-install.sh --channel 9.0

手動安裝

參考文檔:http://www.dbjr.com.cn/aspnet/334718iq4.htm

下載SDK/runtime地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/9.0

這里下載的是dotnet-sdk-9.0.102-linux-x64.tar.gz

# 創(chuàng)建文件夾
sudo mkdir -p /usr/dotnet/9.0.102
# 解壓文件
sudo tar xzf dotnet-sdk-9.0.102-linux-x64.tar.gz -C /usr/dotnet/9.0.102/
# 使用vim修改/etc/profile文件/或者使用SSH更改文件
sudo vim /etc/profile
# 在/etc/profile文件下增加下面內(nèi)容
export DOTNET_HOME=/usr/dotnet/9.0.102
export PATH=${DOTNET_HOME}:$PATH
# 重新加載系統(tǒng)級別的環(huán)境配置文件
source /etc/profile

2、檢查安裝.NET的版本

參考文檔:
https://learn.microsoft.com/zh-cn/dotnet/core/install/how-to-detect-installed-versions?pivots=os-linux

# 查看版本
dotnet --version
# 檢查 SDK 版本
dotnet --list-sdks
# 檢查運行時版本
dotnet --list-runtimes

3、 安裝C++編譯工具

參考文檔:

http://www.dbjr.com.cn/aspnet/334726wux.htm

https://learn.microsoft.com/zh-cn/dotnet/core/deploying/native-aot/?tabs=linux-ubuntu%2Cnet9plus

sudo apt-get install clang zlib1g-dev

4、把解決方案代碼上傳到Linux系統(tǒng)某個文件夾上并轉(zhuǎn)到要發(fā)布的項目csproj文件所在目錄上

5、執(zhí)行dotnet命令發(fā)布

dotnet publish -c Release -r linux-x64 --self-contained /p:PublishAot=true

到此這篇關(guān)于.NET9 AOT部署方案詳解的文章就介紹到這了,更多相關(guān).NET9  AOT部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論