Microsoft持續(xù)發(fā)表Visual Studio 2015的新特性與功能。在最新的稱為Update 2的變更中也不例外,對(duì).NET Native編譯器進(jìn)行了幾項(xiàng)更新。你可能記得,當(dāng).NET native作為編譯目標(biāo)時(shí),Windows應(yīng)用程序(這里指針對(duì)Windows 10的UWP應(yīng)用程序)直接被編譯為本地代碼,而不產(chǎn)生默認(rèn)的中間語(yǔ)言(IL)。這樣做有幾個(gè)優(yōu)點(diǎn),最主要的是開發(fā)者可以繼續(xù)用C#或是Visual Basic寫應(yīng)用程序,而與傳統(tǒng)的基于IL的應(yīng)用程序相比,用戶可得到更快的執(zhí)行速度,更短的啟動(dòng)時(shí)間并占有更少的內(nèi)存。
可以預(yù)見,編譯.NET為本地代碼有許多缺點(diǎn)。Microsoft準(zhǔn)備了一個(gè)很長(zhǎng)的列表,其中列出了他們認(rèn)為的.NET Native與常規(guī)的Windows應(yīng)用程序之間的“行為變化”。本文不會(huì)詳細(xì)說(shuō)明這些變化,但值得注意的是其中涉及泛型反射的變化。正如.NET團(tuán)隊(duì)的Stacey Haffner和Matthew Whilden在一篇博文中寫道的,“當(dāng)編譯本地代碼時(shí),動(dòng)態(tài)性問(wèn)題將會(huì)成為一個(gè)挑戰(zhàn),因?yàn)樗械拇a都必須在編譯時(shí)識(shí)別和編譯。”
由于使用靜態(tài)分析來(lái)確定所有泛型實(shí)例非常復(fù)雜,團(tuán)隊(duì)引入了Universal Shared Generics (UGS)。現(xiàn)在當(dāng)可以用特定類型的代碼表示時(shí),會(huì)產(chǎn)生優(yōu)化后的代碼,而當(dāng)不可表示時(shí)則會(huì)使用UGS。
另外一個(gè)有利于所有.NET Native開發(fā)者的變化是.NET Native項(xiàng)目編譯器后端的改變。最新發(fā)布的1.3.1版本的.NET Native工具使用與Microsoft C++編譯器相同的程序內(nèi)聯(lián)引擎。隨著時(shí)間的推移,.NET團(tuán)隊(duì)計(jì)劃在.NET Native項(xiàng)目中使用更多C++編譯器提供的優(yōu)化方案。
要使用這些新的編譯器功能,你需要下載最新的UWP App Development Tools(1.3.1版本 for Windows 10 SDK 10.0.10586),并從NuGet下載最新的.NET Core UWP包。它們需要安裝在Update 2可用的Visual Studio 2015之上。
查看英文原文:How VS2015 Update 2 Improves .NET Native Code