最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET9?AOT部署方案詳解

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

概念

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

微軟官方文檔是這樣說的

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

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

AOT(Ahead-of-Time)部署:

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

優(yōu)點:

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

缺點:

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

JIT(Just-in-Time)部署:

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

優(yōu)點:

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

缺點:

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

總結(jié):

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

選擇AOT還是JIT部署,需要根據(jù)具體的應(yīng)用場景、性能需求、開發(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ā)布期間啟用本機(jī) AOT 編譯
  • <IsAotCompatible>true</IsAotCompatible> 該屬性用于指示庫是否與本機(jī) AOT 兼容
  • <StripSymbols>false</StripSymbols> 調(diào)試文件對于在調(diào)試器下運行應(yīng)用程序或檢查故障轉(zhuǎn)儲是必需的。在類 Unix 平臺上,將該屬性設(shè)置為在本機(jī)二進(jìn)制文件中包含調(diào)試信息。包含調(diào)試信息會使本機(jī)二進(jìn)制文件更大
  • <PlatformTarget>x64</PlatformTarget> 目標(biāo)平臺內(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進(jìn)行發(fā)布

2.使用dotnet命令

使用cmd進(jìn)入到在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

此腳本默認(rèn)安裝最新的長期支持 (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.fzitv.net/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.fzitv.net/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)文章

  • .NET使用Collections.Pooled提升性能優(yōu)化的方法

    .NET使用Collections.Pooled提升性能優(yōu)化的方法

    這篇文章主要介紹了.NET使用Collections.Pooled性能優(yōu)化的方法,今天要給大家分享類庫Collections.Pooled,它是通過池化內(nèi)存來達(dá)到降低內(nèi)存占用和GC的目的,另外也會帶大家看看源碼,為什么它會帶來這些性能提升,一起通過本文學(xué)習(xí)下吧
    2022-05-05
  • aspxgridview CustomButtonCallback 不支持彈出消息提示解決方法

    aspxgridview CustomButtonCallback 不支持彈出消息提示解決方法

    aspxgridveiw是devexpress的一個grid控件,使用起來還不錯,不能再 CustomButtonCallback 事件中使用response.write,具體的解決方法如下,感興趣的朋友可以參考下哈
    2013-06-06
  • asp.net sql 數(shù)據(jù)庫處理函數(shù)命令

    asp.net sql 數(shù)據(jù)庫處理函數(shù)命令

    asp.net sql 數(shù)據(jù)庫處理函數(shù)命令 ,需要的朋友可以參考下。
    2009-10-10
  • 防止重復(fù)提交 僅提交一次的終極絕殺技

    防止重復(fù)提交 僅提交一次的終極絕殺技

    防止重復(fù)提交,通用的思路,就是當(dāng)用戶點擊提交按鈕后,在瀏覽器中用JS將按鈕disable掉,從而阻止用戶繼續(xù)點擊該按鈕,實現(xiàn)防止重復(fù)提交的目的。網(wǎng)上防止重復(fù)提交的文章已經(jīng)不少了,為啥我還要寫呢,顯然我不是吃飽了撐的。。。
    2010-08-08
  • ASP.NET中GridView 重復(fù)表格列合并的實現(xiàn)方法

    ASP.NET中GridView 重復(fù)表格列合并的實現(xiàn)方法

    本文通過GridView 和 Repeater 解決有關(guān)表格顯示數(shù)據(jù)重復(fù)的數(shù)據(jù)列和并的方法,非常實用,感興趣的朋友一起看下吧
    2016-08-08
  • asp.net MVC實現(xiàn)無組件上傳圖片實例介紹

    asp.net MVC實現(xiàn)無組件上傳圖片實例介紹

    無組件實現(xiàn)上傳圖片使用input的file作為上傳選擇文件,具體實現(xiàn)如下:前后臺代碼很詳細(xì),感興趣的朋友們可不要錯過了哈
    2013-05-05
  • 從ASP.NET Core3.1遷移到5.0的方法

    從ASP.NET Core3.1遷移到5.0的方法

    這篇文章主要介紹了從ASP.NET Core3.1遷移到5.0的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • c# .Net Core靜態(tài)文件服務(wù)器的新人入門教程

    c# .Net Core靜態(tài)文件服務(wù)器的新人入門教程

    這篇文章主要給大家介紹了關(guān)于c# .Net Core靜態(tài)文件服務(wù)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • visual Studio 2017創(chuàng)建簡單控制臺程序

    visual Studio 2017創(chuàng)建簡單控制臺程序

    這篇文章主要為大家詳細(xì)介紹了visual Studio 2017創(chuàng)建簡單控制臺程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • ASP.NET?MVC5網(wǎng)站開發(fā)用戶注冊(四)

    ASP.NET?MVC5網(wǎng)站開發(fā)用戶注冊(四)

    上一次把基本框架搭建起來了,這次開始整Web部分,終于可以看到界面了小激動一下,web項目部分從用戶功能開始,基本有注冊,登錄、注銷、查找、查看、刪除等涉及Member區(qū)域和Manage區(qū)域,供大家參考,具體內(nèi)容如下
    2015-09-09

最新評論

时尚| 宿迁市| 曲麻莱县| 拜城县| 乌审旗| 容城县| 平远县| 宽城| 旬阳县| 葵青区| 赫章县| 万州区| 贵南县| 平利县| 蒙阴县| 花莲市| 剑阁县| 犍为县| 白玉县| 屏东县| 讷河市| 温宿县| 巴马| 鱼台县| 临夏县| 文化| 宜宾市| 冀州市| 玉林市| 灵山县| 东海县| 那曲县| 体育| 吉林省| 错那县| 竹溪县| 巴彦淖尔市| 高州市| 翼城县| 林口县| 潢川县|