gpt4 book ai didi

c# - ReactiveUI - 查看定位器性能

转载 作者:行者123 更新时间:2023-11-30 12:25:41 26 4
gpt4 key购买 nike

在我使用 ReactiveUIWPF 应用程序中,我注意到一个性能不佳的区域。

我有一个 View 模型,其中包含许多其他轻量级 View 模型(想想 30ish)。这些嵌套的 View 模型很简单,通常每个代表一个按钮。它们都显示在一个用户控件中,在一个使用 ReactiveUI 的 OneWayBind 连接的 ItemsControl 中。这意味着每个项目都使用 ViewModelViewHost 显示.

所以,问题

在我强大的台式电脑上,当我导航到这个 View 模型时,在按下“转到 View 模型”按钮和 View 更改之间存在明显的延迟,大约 0.5 秒。当我在 Power-PC 上运行相同的软件时,延迟将近 4 秒。从用户体验的角度来看,这是一个相当大的问题。

我学到了什么

我尝试了很长时间的分析和调试我的代码,没有发现任何问题区域。 Zilch(注意:在 VS 中使用 JustMyCode,因此 ReactiveUI 没有出现)。但是,我确实找到了解决问题的方法。我没有使用 OneWayBind 绑定(bind)到 ItemsControl.ItemSource,而是在 XAML 中这样做:ItemSource={Binding MyViewModels} 并设置DataTemplate 手动。这会导致更快的过渡。

当您将 OneWayBindItemsControl 绑定(bind)时,会自动为您创建一个 ViewModelViewHost,并且 ViewLocator 用于查找 View 模型的 View 。我假设由于某种原因这很慢。

问题

有谁知道我可以如何避免这种性能下降而不必为 ItemsControl 手动定义大量数据模板?如果我有 View 模型的 View 模型的 View 模型,那么事情往往很快就会变得丑陋。根据我过去使用 Caliburn.Micro 的经验, View 位置约定非常快,所以我也想知道我是否没有正确使用 ReactiveUI,那有一种更快的替代方法。

谢谢。

TLDR;

ViewModelViewHost 作为约 30 个 View 模型的 DataTemplate 导致 View 在初始加载时非常缓慢,使 UI 看起来好像已经崩溃。有什么办法可以避免这种情况吗?

最佳答案

我认为这个问题的根本原因是 TransitioningContentControl 的实现问题。

此控件(到处都有许多现有实现,其中大部分源自 Silverlight AFAICT)将在导航出内容时导致额外的加载/卸载转换。

当前控件在导航出时会触发Unload/Load/Unload,而不是单一的Unload。 many 中引用了此问题places .

在 RxUI 中使用时,此错误会导致在离开 View 时调用 WhenActivated,从而导致性能问题,尤其是在当前 View 很复杂的情况下。

应重写 TransitioningContentControl 以避免这种额外的转换,here's不受此问题影响的示例实现。

关于c# - ReactiveUI - 查看定位器性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com