[英]ReactiveUI - View Locator performance
在我使用ReactiveUI
WPF
应用程序中,我注意到一个性能不佳的领域。
我有一个视图模型,其中包含许多其他轻量级视图模型(想想30ish)。 这些嵌套的视图模型很简单,通常每个都代表一个按钮。 它们都显示在用户控件中,在使用ReactiveUI的OneWayBind
连接的ItemsControl
中。 这意味着使用ViewModelViewHost显示每个项目。
在我强大的桌面PC上,当我导航到这个视图模型时,按下“视图模型”按钮和视图更改之间会有明显的延迟,大约0.5秒。 当我在Power-PC上运行相同的软件时,延迟接近4秒。 从UX的角度来看,这是一个非常大的问题。
我在很长一段时间内尝试过剖析和调试我的代码,发现没有问题。 Zilch(注意: 在VS中使用JustMyCode,因此ReactiveUI没有出现 )。 但是,我确实找到了解决问题的方法。 我没有使用OneWayBind
绑定到ItemsControl.ItemSource
, OneWayBind
在XAML中这样做: ItemSource={Binding MyViewModels}
并手动设置DataTemplate
。 这导致更快的转换。
使用ItemsControl
与OneWayBind
绑定时,会自动为您创建ViewModelViewHost
,并使用ViewLocator
查找视图模型的视图。 我认为由于某种原因这很慢。
是否有人知道如何在不必手动为ItemsControl定义大量数据模板的情况下解决这个性能问题? 如果我有视图模型的视图模型的视图模型,那么事情会很快变得丑陋。 根据我过去使用Caliburn.Micro
经验,视图位置约定非常快,所以我也想知道我是不是正确使用ReactiveUI
,并且有一种更快的替代方法。
谢谢。
ViewModelViewHost
作为DataTemplate
个视图模型的DataTemplate
导致视图在最初加载时非常缓慢,使UI看起来好像已经崩溃了。 有什么方法可以避免这种情况吗?
我之前遇到过这个完全相同的问题。
基本上,你想要显示/隐藏,而不是创建/销毁。
创建新的可视化树需要做很多工作,切换标签时通常会延迟几秒或更长时间。
现在,如果您创建了所有内容,然后折叠您不需要的内容并按需显示,突然之间所有内容都会更新。
这可能需要一些重构才能做到这一点,代码可能看起来不那么干净,但它肯定会运行得非常快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.