2017-05-30 144 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