2013-05-18 75 views
1

考慮到替代第三方控件,我在Telerik WPF分層gridview &上遇到了一點性能問題。Telerik RadTreeListView性能差

檢出this simple scenario (zip project) 它是一個RadTreeListView,綁定到一個實體,並帶有一個組合框以擴展到每個級別。表現很糟糕。我正在使用輕量級城域(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); 
} 

打開它,拖來填補你的屏幕的高度,擴大所有項目一對夫婦的深層次(使用組合,左上圖),並圍繞滾動 - 這是非常laggy。在我的工作版本中,類似的方案完全無法使用,而且我目前被迫循環遍歷所有展開的行並分派「ExpandHierarchyItems」調用,這些調用將用戶界面連接起來以防止可怕的滾動體驗(非常緩慢/大規模的用戶界面鎖定,節點不擴展,沒有孩子,錯誤級別的行)。最新版本的telerik WPF,windows 7 x64 - 在i7上變慢,在i5上變慢。

我現在這種比較簡單的場景與替代品(DevExpress的等)...

有沒有人得到了提高性能有什麼建議?或者我會採取一個明確的'Telerik不能提供比這更好的,(別的)'將作爲答案。

http://www.telerik.com/community/forums/wpf/treelist/radtreelistview-poor-performance.aspx

+0

我也注意到了這一點,但與RadGridView。只有RadGridView的空白窗口需要3到4秒才能打開,而具有庫存DataGrid的同一個窗口只需不到一秒。我對這個問題的答案非常感興趣,因爲它可能迫使我們尋找其他的選擇。 – AkselK

回答

1

跨職位,我只是打你演示了一兩分鐘。

當我嘗試編輯RadTreeListView模板時發生錯誤「密鑰不能爲空」。 ControlTemplate被添加到資源中,但它不能應用於控件。所以我無法播放模板。

對於性能,因爲據我所知,我們可以考慮以下幾個方面:

1)佈局

望着RadTreeListView的可視化樹(你可以使用WPF Tree Visualizer), 它包含幾個從樹根到樹葉的遞歸遞歸網格。

根據MSDN,The Layout System

在其最簡單的,佈局是一個遞歸系統導致的元件 被設定尺寸,定位和繪製。更具體地說,佈局 描述了測量和排列面板元素的Children集合的成員的過程。佈局是一個密集的過程。 Children集合越大,必須進行的計算次數越多。基於由擁有 集合的Panel元素定義的佈局行爲,還可以引入複雜性 。

一個相對簡單的面板,如帆布,可以比 更復雜的面板顯著更好的性能,如 電網

每當孩子的UIElement改變其位置時,它就有可能觸發佈局系統的新傳球。因此,瞭解可以調用系統佈局的事件很重要,因爲不必要的調用可能會導致應用程序性能不佳。以下描述調用佈局系統時發生的過程。

所以你的樹越深,計算就會越大。

你應該儘量避免在同一時間大規模佈局更改,並嘗試使用模板簡單的面板(DataTemplate中和控件模板)

而這個鏈接提供了更多的細節In what order are Panels the most efficient in terms of render time and performance?

2)渲染

這與WPF呈現實現有關。 BitmapEffect就是一個例子。

WPF位圖效果在軟件模式下呈現。應用效果的任何對象也將以軟件呈現。在位圖效果的大視覺效果或動畫屬性上使用位圖效果時,性能爲 降級最多。這並不是說你的 不應該以這種方式使用位圖效果,但是你應該謹慎使用 以確保用戶獲得期望的 體驗。