【问题标题】:Xamarin Forms, Prism Forms & IoCXamarin 表单、棱镜表单和 IoC
【发布时间】:2023-03-12 06:14:01
【问题描述】:

我有一个最初使用 Prism 和 Unity 开发的 Xamarin Forms 应用程序。我发现 Unity 在第一次解析对象时相当慢,尽管一旦第一次通过了相同对象类型的所有后续解析,速度就会明显更快。

根据我在another thread 上收到的一些不相关的建议,我决定尝试从 Unity 切换到 DryIoc。不幸的是,我发现在解析对象时这会更慢,但在随后解析那些相同对象类型的新实例时速度没有提高。

所以,我的问题是,我可以用这两个容器做些什么来提高性能?比如……

  • Unity 中是否有任何东西可以让我预先配置 可能会创建的对象,以便第一个 分辨率是否与后续分辨率一样快?
  • 我可以用 DryIoc 做些什么来加快所有对象的解析速度?

作为参考,我自己对每个的用法都很简单;我对我的大多数对象(设置、数据库等)使用RegisterInstance,并通过构造函数将它们注入到我的 ViewModel 对象中。 Forms 和 ViewModel 对象本身都是使用 Prism RegisterTypeForNavigation 扩展方法注册的

【问题讨论】:

  • @dadhi 可能会为您指出一些优化。您可能还想将RegisterInstance 换成UseInstance。那就是说你确定它是容器而不是你的应用程序中的其他东西吗?如果您查看benchmarks,DryIoc 是可用的更快的容器之一。
  • 这就是我的想法,也是我尝试换成它的原因。我将看看 UseInstance 和 RegisterInstance 之间的区别,看看是否有什么突出的。延迟始终在 Prism INavigationService.NavigateAsync 内,但由于在使用 Unity 时第二次导航到相同的表单时几乎没有延迟,我已经排除了这一点以及 ViewModelLocator 服务。
  • RegisterInstance 已弃用,取而代之的是 DryIoc 的 UseInstance。您是否使用任何导航界面(IConfirmNavigationINavigationAware 等)?您在其中的任何代码都可能实际上是在拖慢您的速度。
  • @DanS。是的,我确实使用 IConfirmNavigation 和 INavigationAware 以及 INavigationService。正如我所说,如果我使用 Unity,第一次导航会很慢(可能长达几秒钟),但随后的导航会更快(亚秒级),而使用 DryIoc 时,所有导航都会很慢(尽管不是和第一次使用 Unity 导航一样慢)。我曾希望交换到 DryIoc 可以解决最初的延迟问题,因为基准测试表明它可能会解决问题,但我并没有指望每次解决对象时都会出现延迟,
  • 在不知道您在应用程序中所做的具体操作的情况下,很难说出导致这种行为的原因。如果想发布一个复制行为的样本,我当然很乐意看看。否则,您可以通过 Prism Slack 频道与我联系,我可以私下查看您的问题。

标签: performance xamarin.forms unity-container prism-6 dryioc


【解决方案1】:

首先,您需要切换到 UseInstance 并查看结果。

那么理想情况下,针对特定用例对 DryIoc 与 Unity 进行测试会很棒。

最后,可能和这个问题有关https://bitbucket.org/dadhi/dryioc/issues/453/migration-from-unity

【讨论】:

  • 感谢您的帮助。现在一切正常(请参阅我自己的答案),但我将完成对 DryIoc 的切换,并将考虑使用 UseInstance 而不是 RegisterInstance - 会让您知道我的进展情况。
  • 很高兴它解决了,期待您的任何形式的反馈。
【解决方案2】:

我看到的问题与 IoC 容器无关,而是在 5 月初随着 Visual Studio 15.2 更新引入的a problem with Xamarin。安装最新更新 (15.2.26430.12) 并重建解决方案恢复了我所期望的性能。

【讨论】:

  • 每个人都说 Unity 很慢,而 DryIoc 是要走的路。我正在使用 Unity,我的 XF 应用程序在启动屏幕之后需要几秒钟。你是说 DryIoc 实际上并没有改善事情,尽管我见过所有的基准。你最终使用了什么?
猜你喜欢
  • 2018-09-13
  • 2017-01-31
  • 2017-05-04
  • 2018-04-28
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
相关资源
最近更新 更多