2017-05-30 142 views
1

我有一個Xamarin Forms應用程序,我最初使用Prism和Unity開發。第一次解析對象時,我發現Unity非常慢,儘管第一次通過相同對象類型的所有後續解析明顯更快。Xamarin Forms,Prism Forms和IoC

根據我在another thread上收到的一些無關建議,我決定嘗試從Unity交換到DryIoc。不幸的是,我發現解析對象時速度會更慢,但在解析相同對象類型的新實例時速度沒有提高。

所以,我的問題是,有什麼我可以做任何容器,可以提高性能?例如...

  • 有統一內什麼,讓我預先配置 有可能被創建,使得第一 分辨率是一樣快的以後決議的對象?
  • 有沒有什麼我可以用DryIoc做,這將加快所有的對象分辨率?

作爲參考,我自己的用法很簡單;我爲我的大多數對象(設置,數據庫等)使用RegisterInstance,並通過構造函數將它們注入到ViewModel對象中。 Forms和ViewModel對象本身都是使用Prism登錄的RegisterTypeForNavigation擴展方法

+1

@dadhi可能會爲您指出一些優化。你也可能想爲'UseInstance'換掉'RegisterInstance'。這就是說你確定它是容器,而不是你的應用程序中的其他東西?如果您查看[基準測試](http://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison),DryIoc是可用的更快容器之一。 –

+0

這就是我的想法,爲什麼我試着交換它。我會看看UseInstance和RegisterInstance之間的區別,看看有沒有什麼突出。延遲總是在Prism INavigationService.NavigateAsync之內,但因爲使用Unity時第二次導航到同一表單時幾乎沒有延遲,所以我排除了ViewModelLocator服務。 –

+0

'RegisterInstance'已被棄用,以支持DryIoc的'UseInstance'。您是否在使用任何導航界面('IConfirmNavigation','INavigationAware'等)?你在那裏有任何代碼可能是什麼實際上減慢你的速度。 –

回答

1

我看到的問題是不相關的IoC容器,而是a problem with Xamarin這是在五月初與Visual Studio的15.2更新推出。安裝最新的更新(15.2.26430.12)並重建解決方案可以恢復我期待的性能。

+0

每個人都說Unity如何變得緩慢而DryIoc是最好的選擇。我使用的是Unity,我的XF應用程序需要幾秒鐘才能看到啓動畫面。儘管我已經看到了所有的基準,但你說DryIoc實際上並不會改善事情。你最終使用了什麼? –

1

首先,您需要切換到UseInstance並檢查結果。

那麼理想情況下,對於特定用例的DryIoc vs Unity進行測試將是一件好事。

最後,可能與此問題相關https://bitbucket.org/dadhi/dryioc/issues/453/migration-from-unity

+0

感謝您的幫助。它現在都正常工作了(請參閱我自己的答案),但我將完成切換到DryIoc並將使用UseInstance而不是RegisterInstance - 將讓您知道我如何繼續。 –

+0

很高興解決了,期待您以任何形式反饋。 – dadhi