[情報] 微軟釋出最新.NET Core 3.0預覽版,更新

作者: name2name2 (yang~hi)   2019-06-17 23:36:45
微軟釋出最新.NET Core 3.0預覽版,更新能加速應用程式載入的R2R格式
2019-06-17發表
https://www.ithome.com.tw/news/131288
R2R二進位格式雖然會讓程式檔案容量比較大,但是卻能讓執行使用較少的記憶體量且載
入速度較快
微軟釋出了最新的.NET Core 3.0第6預覽版,更新了能夠加速程式載入速度的ReadyToRun
(R2R)格式,以及可以縮減應用程式大小的組譯連結(Assembly Linking)工具IL
linker。
.NET Core 3.0讓開發者可以把.NET Core用程式編譯成為R2R格式,以縮短啟動的時間,
微軟提到,R2R是一種AOT(Ahead-Of-Time)編譯的形式,其二進位檔案能夠減少JIT在載
入應用程式需要的工作量,藉以提高載入的效能。
由於R2R二進位檔案包含了類似JIT所產生的原生碼,因此能夠減少JIT的工作給予執行緩
衝空間,不過也因為R2R包含了一些中介語言程式碼,因此產生的檔案相對來說也比較大
,是一個啟動效能與檔案大小的取捨。微軟給出了實驗資料,只包含中介語言的應用程式
,檔案大小為150MB,記憶體使用量為69.1MB,而啟動時間為1.9秒,但使用ReadyToRun格
式的相同應用程式,雖然檔案略大為156MB,但是記憶體使用量只有55.7MB,而且啟動速
度只要1.3秒。
不過目前R2R仍有許多限制,R2R現在僅支援自包含(Self-contained)應用程式,在之後
的預覽版才會開始支援與框架相依的應用程式。.NET Core 3.0 SDK可以設定排除特定應
用程式,以免被編譯成為R2R,微軟提到,部分應用程式不需要最佳化效能,不編譯成R2R
反而比較省空間。
.NET Core 3.0開始支持R2R,但R2R並不向後支援,因此較舊的.NET Core版本無法使用,
另外,開發者只能編譯函式庫成R2R,以作為應用程式的一部分,目前還不能作為NuGet套
件交付,微軟表示,這項功能要依使用者回饋決定是否要支援。而R2R現在也不支援跨平
臺編譯,在Windows x64環境只能編譯Windows ARM32、ARM64以及x86映象檔,而在Linux
x64只能編譯Linux ARM32和ARM64映像檔。
除了R2R的更新,微軟提到,.NET Core 3.0還提供了一個特別組譯連結工具IL linker,
可以透過分析中介語言並刪減用不到的組譯語言,確保自包含應用程式僅包含實際需要的
程式碼,而這能夠顯著的降低某些應用程式的大小,微軟提到,通常小型控制臺應用程式
可以減少最多,因為這些工具使用較小的框架子集,可以修剪的幅度比較大。微軟的實驗
資料顯示,對於最基本helloworld應用程式,可以從原本的68MB減少到大約28MB。
而使用映射或是相關動態功能的應用程式或框架,組譯連結工具的修剪工作通常會失敗,
因為IL linker不認識這類動態行為,並且無法決定在Runtime的時候需要使用的框架類型

IL linker與ReadToRun編譯器可以用在同一個應用程式,微軟表示,正常情況是IL
linker會讓應用程式變小,但是ReadyToRun編譯器又為讓應用程式變大,但是效能會大幅
提升,開發者可以在各種配置中進行測試,了解這些工具選項產生的影響。

Links booklink

Contact Us: admin [ a t ] ucptt.com