Windows 10 UWP 3 of N : Deep dive into XAML

  • 927
  • 0
  • UAP
  • 2021-04-30

Windows 10 UWP 3 of N : Deep dive into XAML

XAML是Microsoft Design Language( MDL )的一大重點!XAML橫跨WPF, Silverlight, UAP, UWP的開發平台。

這次文章主要分享在XAML + C#的開發Model在UWP Windows 10 + Visual Studio 2015所帶來好處!

 

.Net Native

這項技術之前在Visual Studio 2013 update 2 就有推出Preview版本,現在已經整合進Visual Studio 2015內了!C#是屬於Management Code所以天生限制就是會比較多吃一些資源但帶來的好處卻不少!如String, Pointer, Thread…等在C++上很重要的概念及功能,在C#上直接變成Object形式來呼叫就好。

使用.Net Native可以有以下幾點好處

  • 60%的冷APP啟動
  • 40%的熱APP啟動
  • 更少的記憶體使用

為什麼會需要用到.Net Native呢?

原因很簡單,之後所有的Platform會被視同為Extension的形式在各個Windows 10裝置上執行,畢竟各個不同裝置還是會有該專屬API所以就得要使用IsTypePresent來判斷APP執行的平台是否有將該Extension載入到APP中,所以一律藉由.Net Native來最佳化APP的效能。

所以!所有Universal Windows 10 .Net apps發佈到用戶端的將會由.Net Native 編譯過

接者來看實際如何設定一些新設定在UWP專案上

在應用程式就分為Target Vision和Min Vision這兩個設定就是因為Windows 10的Metadata也有這兩個屬性來進行新舊版本API在Windows 10上做調整。

Target

Target01

現在由於Windows 10的OS更新模式將會用模組化堆疊,所以可以設定API所支援的最低版本和對應之版本。

DebugMode

在上圖可以看到在Debug的狀態時並不會使用.Net Native tool chain進行Compile動作!切換到Release就會自動將該功能打開。

DEBUGReleaseX86

大家有發現差異點嗎?Debug會長出Core的Folder但Release會長出ilc的Folder

接著細說資料夾的部分

DebugDetailNativeCompile

 

左圖為Debug的Core資料夾Compile出來的東西!可以發現有很多DLL,這是因為每隻DLL都有自己的版本!所以在Debug Mode時候會Copy目前OS安裝的SDK含有的DLL。

右圖為Release的ilc資料夾可以發現Dll少了很多而且長出了一個很大的DLL會是該App的Assembly Name!

AppManifest

上圖左邊的AppManifest是Release的版本右邊則是Debug可以看到Debug有多個Dependence。PackageDependency 這個就是說CLR在現在OS所安裝的版本!等APP被Compile成Release Model 的時候就會依照Store compile的.Net Native Toolchain。

所以在線上的版本( 一般使用者可以下載到的版本 ) 的最後的reversion區塊將會是由Store的Compile來決定!

1 0 0 0
Major Minor Build Reversion

Build Version

從專案的Manifest可以看到不同Windows 10的版本有不少Attribute將會變更!(左邊為10069 右邊為10030)


Runtime Directives ( rd.xml )

這是Windows 10的UWP的新Compile出來的檔案,這個檔案被用來對應metadata和Type是否要被保留!

RMXML

這個簡單範例就是有個RuntimeComponet 需要被Reference但...Release長出來的{ AssemblyName }.DLL的檔案大小想要縮小就用以下步驟

1. 展開APP專案的Properties,並打開Default.rd.xml檔案。

2. 將這行Code遮蔽或刪除


 

3. 將需要用到的Class以下列語法新增在Application的Code block [ 假設只需要Class1的Code不需要Class2的 ]


 

SIZE1

上圖是為縮小前(全部Reference,App1.dll的檔案大小為3881KB)。

SIZE2

上圖為縮小後(部分Code Reference,App1.dll的檔案大小為3691KB)。

而如果想要Build成Control library的話需要將rd.xml設定成嵌入資源( embedded resource )去指定那些型別/屬性使用映射(Reflection)的方式被參考的。

 

 

 

***以上Code以及說明都有可能隨著Windows 10 的版本以及Visual Studio 2015版本有所調整!***

 

參考資料 Build 2015 2-790 Deep dive into XAML and .Net Universal Windows app development

 

下次再分享Windows 10 的新技術拉~