女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

.NET8極致性能優(yōu)化AOT

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 2023-12-06 10:16 ? 次閱讀

前言

.NET8對(duì)于性能的優(yōu)化是方方面面的,所以AOT預(yù)編譯機(jī)器碼也是不例外的。本篇來(lái)看下對(duì)于AOT的優(yōu)化。

概述

首先要明確一個(gè)概念,.NET里面的AOT它是原生的。什么意思呢?也就是說(shuō)通過(guò)ILC編譯器(AOT編譯器,參考:.Net 7 新編譯器 ILC 簡(jiǎn)析)編譯出來(lái)的代碼是各個(gè)平臺(tái)上可以直接運(yùn)行的二進(jìn)制代碼。比如MacOS的二進(jìn)制,Linux二進(jìn)制等等。所以稱(chēng)之為原生。

C#源碼被ILC編譯之后,生成了一個(gè)完全原生態(tài)代碼的可執(zhí)行文件。在執(zhí)行的時(shí)候不需要JIT來(lái)編譯任何東西,因?yàn)镴IT已經(jīng)在ILC里面被充分利用過(guò)了。實(shí)際上AOT里面也沒(méi)有包含JIT。那么它如何優(yōu)化呢?只能是在ILC里面調(diào)用JIT的時(shí)候了。所以它這個(gè)優(yōu)化依然依靠JIT。.NET8里面優(yōu)化AOT的一個(gè)典型的例子,就是ASP.NET應(yīng)用程序在使用AOT的時(shí)候表現(xiàn)不錯(cuò),同時(shí)也降低了總成本。

在.NET8里面優(yōu)化AOT的一個(gè)重要的目標(biāo)就是減少AOT可執(zhí)行文件的大小,關(guān)于這點(diǎn)的效果。我們現(xiàn)在就可以看到

下面創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序

dotnet new console -o nativeaotexample -f net7.0

由于上面是通過(guò).NET7.0創(chuàng)建的,我們把這個(gè)控制臺(tái)的csproj更改下

net7.0
改為
net7.0;net8.0

可以輕松的構(gòu)建.NET7.0或者.NET8.0的程序

繼續(xù)

...項(xiàng)中添加如下
true編譯成AOT文件

下面我們就可以通過(guò)dotnet publish發(fā)布它了,linux如下:

dotnet publish -f net7.0 -r linux-x64 -c Release

現(xiàn)在它生成了一個(gè).NET7.0版本的獨(dú)立可執(zhí)行文件,可通過(guò)ls/dir 輸出目錄以查看生成的二進(jìn)制大小

12820K /home/stoub/nativeaotexample/bin/Release/net7.0/linux-x64/publish/nativeaotexample

這個(gè)大約是13M左右,我們?cè)賮?lái)看下.NET8.0

dotnet publish -f net8.0 -r linux-x64 -c Release

生成的可執(zhí)行文件大小如下:

1536K/home/stoub/nativeaotexample/bin/Release/net8.0/linux-x64/publish/nativeaotexample

1.5M的大小,這個(gè)優(yōu)化的力度不可不大啊。整整優(yōu)化了將近10倍的體積。這就是.NET8.0的優(yōu)化魔力。

但是優(yōu)化的情況遠(yuǎn)不止如此,比如說(shuō)我們可以配置csproj使AOT的體積更小

csproj添加如下size表示要生成的AOT大小
Size

如果我們不需要全球化代碼和數(shù)據(jù),需要特定的代碼和數(shù)據(jù),并且使用不變模式,可以csproj添加如下選項(xiàng)

true

如果你不想在AOT異常的時(shí)候拋出堆棧,那么你也可以在csproj里面添加如下

false

重新通過(guò)dotnet publish net8.0發(fā)布了之后,它的體積還可以繼續(xù)減小

1248K /home/stoub/nativeaotexample/bin/Release/net8.0/linux-x64/publish/nativeaotexample

再次縮小了0.3M大小。

然而,你以為到此優(yōu)化就為止了嗎?并沒(méi)有,.NET8不僅對(duì)AOT編譯器內(nèi)部進(jìn)行了改進(jìn),而且還對(duì)單個(gè)庫(kù)也進(jìn)行了性能優(yōu)化和改進(jìn)。比如HttpClient。

當(dāng)然除了體積的優(yōu)化之外,還有其它的優(yōu)化,比如避免了在讀取靜態(tài)字段時(shí)的輔助調(diào)用,再比如BenchmarkDotNet 也是支持AOT化的,也就是性能測(cè)試上面的支持。我們可以只使用 --runtimes nativeaot7.0 nativeaot8.0,而不使用 --runtimes net7.0 net8.0,如下代碼

// dotnet run -c Release -f net7.0 --filter "*" --runtimes nativeaot7.0 nativeaot8.0


using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;


BenchmarkSwitcher.FromAssembly(typeof(Tests).Assembly).Run(args);


[HideColumns("Error", "StdDev", "Median", "RatioSD")]
public class Tests
{
    private static readonly int s_configValue = 42;


    [Benchmark]
    public int GetConfigValue() => s_configValue;
}

上面代碼可以通過(guò)如下AOT化運(yùn)行

dotnet run -c Release -f net7.0 --filter "*" --runtimes nativeaot7.0 nativeaot8.0

BenchmarkDotNet 輸出如下

Method Runtime Mean Ratio
GetConfigValue NativeAOT 7.0 1.1759 ns 1.000
GetConfigValue NativeAOT 8.0 0.0000 ns 0.000

可以看到即使是性能測(cè)試的Benchmark,AOT優(yōu)化也是不放過(guò)的。

另外還值得一提的地方就是分層,因?yàn)锳OT里面沒(méi)有分層的概念。但是即時(shí)編譯也就是不是AOT編譯的時(shí)候,一個(gè)方法從tier0提升到tier1,方法里面的靜態(tài)字段必須被初始化過(guò)了。AOT里面添加了一個(gè)快速路徑檢查字段是否初始化,避免一些不必要的開(kāi)銷(xiāo)。

其它的一些改進(jìn),比如AOT鎖的實(shí)現(xiàn)方式。使用了一種混合方式,開(kāi)始使用輕量級(jí)自旋鎖,后面升級(jí)到使用 System.Threading.Lock 類(lèi)型,這個(gè)應(yīng)該會(huì)在.NET9.0里面釋放出來(lái)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    803

    瀏覽量

    42107
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3819

    瀏覽量

    82327
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4886

    瀏覽量

    70186
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3321

    瀏覽量

    58644
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1653

    瀏覽量

    49818

原文標(biāo)題:.NET8極致性能優(yōu)化AOT

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式開(kāi)發(fā)極致性能優(yōu)化案例

    我們之前進(jìn)行了TFT刷屏測(cè)試確認(rèn)了基本功能。刷屏速度是決定GUI顯示幀率最根本的一環(huán),只有優(yōu)化極致的刷屏速度,才能有基礎(chǔ)實(shí)現(xiàn)更好效果的GUI。本篇就進(jìn)行刷屏的優(yōu)化,其實(shí)其思想是通用的,對(duì)于其他代碼也可以參考。
    的頭像 發(fā)表于 06-08 11:06 ?1684次閱讀
    嵌入式開(kāi)發(fā)<b class='flag-5'>極致</b><b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>案例

    .NET8性能優(yōu)化之線程

    目前來(lái)說(shuō),沒(méi)有確切的證據(jù)證明哪個(gè)線程池好用,或者效率更高。但是開(kāi)發(fā)者可以使用上面的選項(xiàng)來(lái)進(jìn)行自己的選擇,有一個(gè)測(cè)試就是在Windows線程池在比較大的機(jī)器上的IO擴(kuò)展性不太好。如果你的應(yīng)用程序已經(jīng)大量的使用了Windows線程池,那么可以通過(guò)以上設(shè)置為另一個(gè)線程池操作也是可以的。此外,線程池經(jīng)常被阻塞,Windows線程池對(duì)此有更多的處理,也能更有效的比托管線程處理的更好。
    的頭像 發(fā)表于 01-22 14:50 ?1447次閱讀

    保時(shí)捷Panamera 2.9T艾森ECU升級(jí):低功率晉級(jí)高功率,找回極致性能

    想要打造一款頂級(jí)的大型豪華GT跑車(chē),有兩個(gè)重要因素:一個(gè)是極致舒適,另一個(gè)必須是極致性能。作為保時(shí)捷旗下經(jīng)典的掀背轎跑,新款Panamera 2.9T 集成了保時(shí)捷優(yōu)良的高貴血統(tǒng),只可惜保時(shí)捷將
    發(fā)表于 04-01 17:20

    《現(xiàn)代CPU性能分析與優(yōu)化》---精簡(jiǎn)的優(yōu)化書(shū)

    來(lái)提高程序的性能。由于這本書(shū)是Denis在easyperf.net博客分享內(nèi)容的系統(tǒng)整理和總結(jié)。更加偏向?qū)崙?zhàn)類(lèi)型,在閱讀過(guò)程中,可以直接對(duì)自己的C/C++代碼進(jìn)行剖析和優(yōu)化實(shí)驗(yàn)。當(dāng)然這本書(shū)也是有缺點(diǎn)
    發(fā)表于 04-18 16:03

    Oracle數(shù)據(jù)庫(kù)網(wǎng)絡(luò)安全訪問(wèn)機(jī)制

    本文主要分析了Oracle 客戶端通過(guò)Net8 訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器過(guò)程,闡述了Oracle 數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)訪問(wèn)機(jī)制以及Net8 在實(shí)現(xiàn)Oracle 數(shù)據(jù)庫(kù)的服務(wù)器和客戶端之間安全的數(shù)據(jù)通信中的重要作用。
    發(fā)表于 08-29 10:20 ?20次下載

    利用緩存技術(shù)優(yōu)化基于ASP.NET的Web GIS性能

    隨著Web GIS的快速發(fā)展和廣泛應(yīng)用,對(duì)Web GIS的性能提出了更高的要求。ASP.NET是微軟推出的新一代動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),它提供了強(qiáng)大的Web應(yīng)用開(kāi)發(fā)功能,依托ActiveX技術(shù),開(kāi)發(fā)基于ASP.NET的Web
    發(fā)表于 09-23 10:54 ?17次下載

    AOT412 datasheet

    The AOT412 and AOT412L is fabricated with SDMOSTM trench technology that combines excellent RDS
    發(fā)表于 09-28 13:38 ?11次下載
    <b class='flag-5'>AOT</b>412 datasheet

    WindowsCE_NET實(shí)時(shí)性能的測(cè)試與研究

    WindowsCE_NET實(shí)時(shí)性能的測(cè)試與研究
    發(fā)表于 10-25 09:26 ?4次下載
    WindowsCE_<b class='flag-5'>NET</b>實(shí)時(shí)<b class='flag-5'>性能</b>的測(cè)試與研究

    HarmonyOS:極致性能,全棧優(yōu)化

    性能一直是華為非常專(zhuān)注的一個(gè)領(lǐng)域,華為通過(guò)HarmonyOS全棧的系統(tǒng)的技術(shù)加持和優(yōu)化,包括內(nèi)核層、硬件抽象層、runtime層、框架等等。各方面的努力,華為讓HarmonyOS的綜合性能比基于EMUI有了更大幅度的提升。
    的頭像 發(fā)表于 06-03 09:08 ?2914次閱讀
    HarmonyOS:<b class='flag-5'>極致</b><b class='flag-5'>性能</b>,全棧<b class='flag-5'>優(yōu)化</b>

    【專(zhuān)欄精選】嵌入式開(kāi)發(fā)極致性能優(yōu)化案例

    做電子發(fā)燒友技術(shù)探索官,分享你的原創(chuàng)電子行業(yè)文章! 本期為大家?guī)?lái)一篇嵌入式開(kāi)發(fā)性能優(yōu)化案例,感興趣的小伙伴可以關(guān)注作者一起學(xué)習(xí)哦~ 本期推 薦 專(zhuān)欄作者 : 嵌入式USB開(kāi)發(fā) (點(diǎn)擊查看作者主頁(yè)
    的頭像 發(fā)表于 06-13 08:15 ?862次閱讀

    .NET 8發(fā)布首個(gè)RC,比.NET 7的超級(jí)快更快!

    此外,RC1 在 .NET MAUI 方面帶來(lái)了諸多質(zhì)量改進(jìn),修復(fù)內(nèi)存泄露和諸多特定平臺(tái)的問(wèn)題,改進(jìn)了 UI 控制并優(yōu)化性能,在 Mac 上支持蘋(píng)果 Xcode 15。
    的頭像 發(fā)表于 09-18 16:54 ?1577次閱讀
    .<b class='flag-5'>NET</b> <b class='flag-5'>8</b>發(fā)布首個(gè)RC,比.<b class='flag-5'>NET</b> 7的超級(jí)快更快!

    .NET8為原生AOT改進(jìn) Linux上原生AOT應(yīng)用程序大小最多減少50%

    ,它不需要運(yùn)行時(shí),所有內(nèi)容都包含在一個(gè)文件中。 微軟介紹道,.NET 8 為原生 AOT 發(fā)布帶來(lái)了以下改進(jìn): 增加對(duì) x64 和 macOS Arm64 架構(gòu)的支持 將 Linux 上原生
    的頭像 發(fā)表于 11-14 11:53 ?1693次閱讀
    .<b class='flag-5'>NET8</b>為原生<b class='flag-5'>AOT</b>改進(jìn) Linux上原生<b class='flag-5'>AOT</b>應(yīng)用程序大小最多減少50%

    .NET 8.0中有哪些新的變化?

    發(fā)布容器映像,并且默認(rèn)情況下是非 root 的。由于 .NET 基礎(chǔ)映像更小,因此可以更快地部署容器化應(yīng)用程序 - 包括我們映像的新實(shí)驗(yàn)變體,這些變體可為本機(jī) AOT 提供真正最小的應(yīng)用程序大小。
    的頭像 發(fā)表于 11-20 16:15 ?1220次閱讀
    .<b class='flag-5'>NET</b> 8.0中有哪些新的變化?

    .NET8為什么要引入Non-GC Heap這種機(jī)制呢?

    .NET8里面JIT引入了一個(gè)新的機(jī)制,叫做Non-GC Heap。JIT可以確保相關(guān)對(duì)象分配在Non-GC Heap上,該堆像其名稱(chēng)一樣,不受GC管理。
    的頭像 發(fā)表于 11-28 10:38 ?893次閱讀

    OPCUA產(chǎn)品情報(bào):.NET SDK最新版本公布,系列產(chǎn)品穩(wěn)步更新中!

    近期,Unified Automation公司推出了.NET based OPC UA SDK v4.0.0這一產(chǎn)品。該版本除了例行的Bug修復(fù)外,還進(jìn)行了部分函數(shù)API的修改與功能的擴(kuò)展,新添了對(duì)使用MQTT/JSON傳輸?shù)腜ubSub模塊和.NET8的支持。
    的頭像 發(fā)表于 03-14 10:00 ?1212次閱讀
    OPCUA產(chǎn)品情報(bào):.<b class='flag-5'>NET</b> SDK最新版本公布,系列產(chǎn)品穩(wěn)步更新中!