【发布时间】: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。您是否使用任何导航界面(IConfirmNavigation、INavigationAware等)?您在其中的任何代码都可能实际上是在拖慢您的速度。 -
@DanS。是的,我确实使用 IConfirmNavigation 和 INavigationAware 以及 INavigationService。正如我所说,如果我使用 Unity,第一次导航会很慢(可能长达几秒钟),但随后的导航会更快(亚秒级),而使用 DryIoc 时,所有导航都会很慢(尽管不是和第一次使用 Unity 导航一样慢)。我曾希望交换到 DryIoc 可以解决最初的延迟问题,因为基准测试表明它可能会解决问题,但我并没有指望每次解决对象时都会出现延迟,
-
在不知道您在应用程序中所做的具体操作的情况下,很难说出导致这种行为的原因。如果想发布一个复制行为的样本,我当然很乐意看看。否则,您可以通过 Prism Slack 频道与我联系,我可以私下查看您的问题。
标签: performance xamarin.forms unity-container prism-6 dryioc