我在Telerik WPF分层网格视图中遇到了一些性能问题。考虑替代的第三方控制。
结帐this simple scenario (zip project) 它是一个RadTreeListView,绑定到具有组合框的实体,以扩展到每个级别。表现是废话。我正在使用轻量级metro(windows8)样式,并按如下方式覆盖了CreateCellElement(并按照建议)。
public override FrameworkElement CreateCellElement(GridViewCell cell, object dataItem)
{
if (cell.Content != null && cell.DataContext == dataItem)
{
return (FrameworkElement)cell.Content;
}
return base.CreateCellElement(cell, dataItem);
}
打开它,拖动以填充屏幕的高度,展开几个级别的所有项目(使用组合,左上角)并滚动 - 它非常迟钝。在我的工作版本中,类似的场景完全无法使用,我现在被迫遍历所有扩展的行并调度“ExpandHierarchyItems”调用,这些调用将UI连接多年,只是为了防止可怕的滚动体验(极其缓慢/大量的UI)锁定,节点未扩展,没有子节点,行处于错误的级别)。最新版本的telerik WPF,Windows 7 x64 - 在i7上速度慢,在i5上速度更慢。
我现在正在将这个简单的场景与替代品(devexpress等)进行比较......
有没有人有任何改善表现的建议?或者我会采取一个明确的'Telerik不能提供比这更好的东西,而(别的东西)将作为答案。
来自http://www.telerik.com/community/forums/wpf/treelist/radtreelistview-poor-performance.aspx
的交叉帖子答案 0 :(得分:1)
我刚刚播放了你的演示几分钟。
当我尝试编辑RadTreeListView模板时出现错误“Key not not null”。 ControlTemplate
已添加到资源中,但无法应用于控件。所以我无法播放模板。
就性能而言,据我所知,我们可以考虑以下几个方面:
1)布局
查看RadTreeListView的可视化树(您可以使用WPF Tree Visualizer), 它从树根到树叶递归地包含几个Grid。
根据MSDN,The Layout System:
最简单的布局是一个导致元素的递归系统 大小,定位和绘制。更具体地说,布局 描述了测量和安排a成员的过程 Panel元素的Children集合。布局是一个密集的过程。 儿童系列越大,数量越多 必须进行的计算。也可以引入复杂性 基于所拥有的Panel元素定义的布局行为 集合。
一个相对简单的面板,如Canvas,可以有 性能明显优于更复杂的面板,例如 的格即可。
每次儿童UIElement改变其位置时,它都有 布局系统触发新通道的可能性。因此, 了解可以调用布局的事件非常重要 系统,因为不必要的调用会导致应用程序不佳 性能。以下描述了发生时的过程 布局系统被调用。
因此树越深,计算就越大。
您应该尝试同时避免大量布局更改并尝试在模板中使用更简单的面板(DataTemplate和ControlTemplate)
此链接提供了更多详细信息In what order are Panels the most efficient in terms of render time and performance?
2)渲染
这与WPF渲染实现有关。 BitmapEffect就是一个例子。
WPF位图效果以软件模式呈现。任何对象 应用效果也将在软件中呈现。表现是 在大型视觉效果上使用位图效果时,降级最多 动画制作Bitmap效果的属性。这不是说你 不应该以这种方式使用Bitmap效果,但你应该使用 谨慎并彻底测试,以确保您的用户获得 你期待的经历。
答案 1 :(得分:0)
查看本文 - 您可以优化代码,以便Telerik的组件与默认的WPF组件一样快。
http://jiripik.me/2013/11/14/rendering-of-telerik-wpf-radgridview-and-wpf-datagrid-at-warp-speed/
答案 2 :(得分:0)