微軟釋新.NET Core 3.0預覽版可加速程序加載速度ReadyToRun

微軟釋出了最新的.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 ARM3二、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編譯程序又爲讓應用程序變大,可是效能會大幅提高,開發者能夠在各類配置中進行測試,瞭解這些工具選項產生的影響。測試

相關文章
相關標籤/搜索