国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C++的性能C#的產能?!

2019-11-17 03:10:39
字體:
來源:轉載
供稿:網友

C++的性能C#的產能?! - .Net Native 系列《三》:.NET Native部署測試方案及樣例

  之前一文《c++的性能, c#的產能?!魚和熊掌可以兼得,.NET NATIVE初窺》 獲得很多朋友支持和鼓勵,也更讓我堅定做這項技術的推廣者,希望能讓更多的朋友了解這項技術,于是先從官方信息的翻譯開始做起。

  此系列系小九的學堂原創翻譯,翻譯自微軟官方開發向導,一共分為六個主題。本文是第三個主題:.NET Native部署測試及樣例

  向導文鏈接:《C++的性能C#的產能?! - .Net Native 系列:開發向導

  [小九的學堂,致力于以平凡的語言描述不平凡的技術。如要轉載,請注明來源:小九的學堂。VEVb.com/xfuture]


    原文:.NET Native Getting Started

 .NET Native部署測試及樣例

.NET Framework 4.5

    

Note小貼士

這個主題依賴于預發行的.net native開發者預覽版。下載地址:Microsoft Connect website. 友情提示需要注冊..

  

   開發流程移步步驟《二 . NET Native開發流程詳解》

  部署及測試:


  

  當你開發流程結束,配置成功.Net Native Tools并且更新了運行時指令文件, 你可以開始重建和部署測試你的應用。.Net Native 原生的二進制文件放置在項目屬性配置的生成輸出目錄的子目錄ILC.out中。若沒有這個文件夾,則說明該項目并沒有被.Net Native成功編譯。

  .Net Native 目前支持x64和arm框架,所以你只能部署該應用程序到相應的設備中。之后您需要在該設備上進行測試和解決故障。

  如果你的應用程序不能正常運行(尤其是運行時拋出了MissingMetadataException或MissingInteropDataException異常),您需要按照下一塊內容:手動解決缺少元數據異常。啟動First-chance exception(程序產生了異常并被捕獲,繼續運行) 可以幫助您發現這些bugs。

  經過了測試和調試錯誤,您已經對上述的異常進行很好的處理后,應該測試一些性能優化情況。要做性能測試,必須要將項目構建從debug改成release,測其發行版本。

  常見的問題:


  .net native 最常見的問題就是遇到MissingMetadataException了。該異常會導致程序出現不可預測的行為甚至崩掉。本節來討論如何通過在運行時添加指令來進行調試和解決此類型的異常。有關運行指令格式相關的信息,請參照:Runtime Directives (rd.xml) Configuration File Reference.當你添加好運行指令后,你可以部署和測試你的應用程序并且解決元數據的相關異常。

  注意: 添加指令并不應該更改底層代碼,應該在較高層次集中處理。建議在命名空間或者類型初添加指令,而不是每一塊代碼段。添加指令后機器碼項目編譯時間也會增長。

  當處理元數據丟失的異常時,應考慮如下問題:

    1. 應用程序做了什么導致了這個異常? 例如它是否是數據綁定?還是序列化和反序列化拿到數據?或者是反射?

    2. 這個異常是否是普遍的?例如當序列化一個對象時產生了該異常,你就需要每一個序列化的部分都來檢查測試一下了。

    3. 盡量少的用反射。重構代碼,將反射部分盡可能的更換機制。

  測試中遇到問題的樣例:

  


    Example: Handling Exceptions When Binding Data

    這個例子是一個.Net Native項目當綁定數據時遇到的MissingMetadataException異常。異常信息如下:

    

    This Operation cannot be carried out as metadata for the following type was removed for performance reasons: App.ViewModels.MainPageVM

    下面是相關棧調用的信息:

Reflection::Execution::ReflectionDomainSetupImplementation.CreateNonInvokabilityException+0x238Reflection::Core::ReflectionDomain.CreateNonInvokabilityException+0x2eReflection::Core::Execution::ExecutionEnvironment.+0x316System::Reflection::Runtime::PRopertyInfos::RuntimePropertyInfo.GetValue+0x1cbSystem::Reflection::PropertyInfo.GetValue+0x22System::Runtime::InteropServices::WindowsRuntime::CustomPropertyImpl.GetValue+0x42App!$66_Interop::McgNative.Func_IInspectable_IInspectable+0x158App!$66_Interop::McgNative::__vtable_Windows_UI_Xaml_Data__ICustomProperty.GetValue__STUB+0x46Windows_UI_Xaml!DirectUI::PropertyProviderPropertyaccess::GetValue+0x3f Windows_UI_Xaml!DirectUI::PropertyAccessPathStep::GetValue+0x31 Windows_UI_Xaml!DirectUI::PropertyPathListener::ConnectPathStep+0x113

    這個應用是WPF程序,Xaml中的空間元素(View)通過綁定和PropertyInfo.GetValue來通過類型拿到上下文數據載體(ViewModel)屬性的值。但是這個屬性的元數據丟失了,所以報出了元數據丟失的異常。

    解決方案:

    第一步設置該對象是可序列化的,保證其是可訪問的:

    

<Type Name="App.ViewModels.MainPageVM" Serialize="Required Public" />

    第二步考慮其是否為普遍問題。在本例中所有viewmodel都存在該問題,所以不應一次只修改一個地方后就繼續進行調試。由于所有viewmodel都在app.viewmodels里所以可以進行如下設置:

    

<Namespace Name="App.ViewModels " Serialize="Required Public" />

    由于數據綁是基于反射的,所以無法通過更改代碼方式來避免反射。但有一些方法可以做到在編譯時就將view和viewmodel關聯起來,不依賴運行時來保存元數據。例如可以設置Windows.UI.Xaml.Data.BindableAttribute 屬性,它會讓編譯器在編譯時關聯上下文,避免使用運行時Default.rd.xml序列化來拿元數據。

    有關rd.xml可以參閱Runtime Directives (rd.xml) Configuration File Reference.


    在開發中可能會遇到更多的問題,可以MSDN論壇來進行發問。

    若想查看該系列前幾篇可以點擊: 向導

    

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五原县| 精河县| 色达县| 沙田区| 黎平县| 昆山市| 平遥县| 平塘县| 阜新市| 虎林市| 慈溪市| 安西县| 和政县| 平远县| 余姚市| 南木林县| 彩票| 临漳县| 三门峡市| 仙游县| 诸暨市| 阳山县| 尼木县| 河北省| 鞍山市| 施甸县| 和平县| 上饶市| 襄樊市| 太谷县| 安顺市| 竹山县| 永年县| 荔波县| 涞水县| 南充市| 裕民县| 驻马店市| 八宿县| 桃园市| 苏尼特右旗|