Wpf Telerik RadTreeListView性能差

Wpf Telerik RadTreeListView性能差,wpf,telerik,radtreelist,Wpf,Telerik,Radtreelist,我在Telerik WPF Hierarchy gridview中遇到了一点性能问题&正在考虑其他第三方控件 退房 它是一个RadTreeListView,绑定到一个实体上,并带有一个组合框以扩展到每个级别。表演糟透了。我使用的是轻量级metro(windows8)样式,并按如下所示(和建议)重写了CreateCellElement 打开它,拖动以填充屏幕的高度,将所有项目扩展到两个级别(使用组合键,左上角)并滚动-它非常滞后。在我的工作版本中,一个类似的场景完全不可用,我目前被迫在所有展开的行

我在Telerik WPF Hierarchy gridview中遇到了一点性能问题&正在考虑其他第三方控件

退房 它是一个RadTreeListView,绑定到一个实体上,并带有一个组合框以扩展到每个级别。表演糟透了。我使用的是轻量级metro(windows8)样式,并按如下所示(和建议)重写了CreateCellElement

打开它,拖动以填充屏幕的高度,将所有项目扩展到两个级别(使用组合键,左上角)并滚动-它非常滞后。在我的工作版本中,一个类似的场景完全不可用,我目前被迫在所有展开的行中循环,并发送“ExpandHierarchyItems”调用,这会将UI绑定多年,只是为了防止可怕的滚动体验(非常缓慢/大量的UI锁定,节点未展开,没有子项,行处于错误级别)。最新版本的telerik WPF,windows 7 x64-在i7s上速度较慢,在i5上甚至更慢

我现在将这个简单的场景与备选方案(devexpress等)进行比较

有人对提高绩效有什么建议吗?或者我会用一个明确的“Telerik不能提供比这更好的,而且(其他东西)会”作为答案


我刚刚播放了几分钟你的演示

当我试图编辑RadTreeListView模板时,出现了一个错误“Key cannot be null”。
ControlTemplate
已添加到参考资料中,但无法应用于控件。所以我不能播放模板

对于绩效,据我所知,我们可以考虑以下几个方面:

1) 布局

查看RadTreeListView的可视树(您可以使用), 它包含从树根到树叶递归的几个网格

根据MSDN,:

在最简单的情况下,布局是一个递归系统,它导致一个元素 尺寸、位置和绘制的。更具体地说,是布局 描述测量和安排项目成员的过程 面板元素的子集合。布局是一个密集的过程。 子集合越大,子集合的数量越多 必须进行的计算。也可以引入复杂性 基于所属面板元素定义的布局行为 收藏

相对简单的面板(如Canvas)可以具有 比更复杂的面板(例如 网格

每次子元素更改其位置时,它都具有 通过布局系统触发新通道的可能性。所以,, 了解可以调用布局的事件非常重要 系统,因为不必要的调用可能会导致较差的应用程序 演出以下描述了当 调用布局系统

因此,树越深,计算量就越大

同时应尽量避免大规模布局更改,并尽量在模板(DataTemplate和ControlTemplate)中使用更简单的面板

这个链接提供了更多的细节

2) 渲染

这与WPF呈现实现有关。 这就是一个例子

WPF位图效果以软件模式呈现。任何物体 应用也将在软件中渲染的效果。性能是 在大型视觉效果上使用位图效果或 设置位图效果属性的动画。这并不是说你 根本不应该以这种方式使用位图效果,但应该使用 小心并彻底测试,以确保您的用户获得 体验你所期待的


我刚刚播放了几分钟你的演示

当我试图编辑RadTreeListView模板时,出现了一个错误“Key cannot be null”。
ControlTemplate
已添加到参考资料中,但无法应用于控件。所以我不能播放模板

对于绩效,据我所知,我们可以考虑以下几个方面:

1) 布局

查看RadTreeListView的可视树(您可以使用), 它包含从树根到树叶递归的几个网格

根据MSDN,:

在最简单的情况下,布局是一个递归系统,它导致一个元素 尺寸、位置和绘制的。更具体地说,是布局 描述测量和安排项目成员的过程 面板元素的子集合。布局是一个密集的过程。 子集合越大,子集合的数量越多 必须进行的计算。也可以引入复杂性 基于所属面板元素定义的布局行为 收藏

相对简单的面板(如Canvas)可以具有 比更复杂的面板(例如 网格

每次子元素更改其位置时,它都具有 通过布局系统触发新通道的可能性。所以,, 了解可以调用布局的事件非常重要 系统,因为不必要的调用可能会导致较差的应用程序 演出以下描述了当 调用布局系统

因此,树越深,计算量就越大

同时应尽量避免大规模布局更改,并尽量在模板(DataTemplate和ControlTemplate)中使用更简单的面板

这个链接提供了更多的细节

2) 渲染

这与WPF呈现实现有关。 这就是一个例子

WPF位图效果以软件模式呈现。任何物体 应用也将在软件中渲染的效果。性能是 在大型视觉效果上使用位图效果或 动画特性
public override FrameworkElement CreateCellElement(GridViewCell cell, object dataItem)
{
    if (cell.Content != null && cell.DataContext == dataItem)
    {
        return (FrameworkElement)cell.Content;
    }

    return base.CreateCellElement(cell, dataItem);
}