看板 C_Sharp 關於我們 聯絡資訊
微軟釋出最新.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編譯器又為讓應用程式變大,但是效能會大幅 提升,開發者可以在各種配置中進行測試,了解這些工具選項產生的影響。 -- · ◢█◤ ◢█████ ┌─┐ 批踢踢實業坊██◥█· ◢█████◤ · │└┐ ptt.cc ██████◤ ◢█████ │– │ ◢██████◤ ◢█████◤ ˙ · ███████████████████████████████████████ ███████████████████████████████████████ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.169.32 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1560785878.A.244.html