2013-05-18 2 views
1

У меня проблема с производительностью с иерархическим gridview Telerik WPF & с учетом альтернативных сторонних элементов управления.Telerik RadTreeListView плохой производительности

Отъезд this simple scenario (zip project) Его RadTreeListView, привязанный к сущности с выпадающим списком для расширения до каждого уровня. Производительность - дерьмо. Я использую стиль lightweight 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, которые связывают пользовательский интерфейс на века, просто чтобы избежать ужасающего прокрутки (чрезвычайно медленный/массивный интерфейс) блокировки, узлы не расширены, нет детей, строки на неправильном уровне). Последняя версия telerik WPF, Windows 7 x64 - медленная на i7s, еще медленнее на i5.

Я теперь сравнивая этот простой сценарий с альтернативами (DevExpress и т.д.) ...

Кто-нибудь есть какие-либо предложения по улучшению производительности? Или я возьму окончательный вариант «Telerik can not», который будет лучше, чем этот, и (что-то еще) будет «ответом».

крест сообщение от http://www.telerik.com/community/forums/wpf/treelist/radtreelistview-poor-performance.aspx

+0

Я также заметил это, но с RadGridView. Пустое окно с ничего, кроме RadGridView, занимает от 3 до 4 секунд, а одно и то же окно с запасом DataGrid занимает менее секунды. Я очень заинтересован в ответе на это, поскольку это может заставить нас искать другие альтернативы. – AkselK

ответ

1

Я просто играл свои демо в течение нескольких минут.

Ошибка «Ключ не может быть пустым», когда я попытался отредактировать шаблон RadTreeListView. В ресурсах добавляется ControlTemplate, однако он не может быть применен к элементу управления. Поэтому я не могу играть в шаблон.

Для исполнения, насколько я знаю, мы могли бы рассмотреть следующие аспекты:

1) Layout

Глядя на визуальном дереве RadTreeListView (можно использовать WPF Tree Visualizer), It содержит несколько Grid рекурсивно от корня дерева до дерева.

Согласно MSDN, The Layout System:

В самом простом, расположении является рекурсивной системой, которая приводит к элементу размера, будучи расположенным и нарисованным. Более конкретно, макет описывает процесс измерения и компоновки элементов коллекции детей элемента « ». Макет - это интенсивный процесс. Чем больше коллекция «Дети», тем больше вычислений, которые должны быть сделаны в размере . Сложность также может быть введена на основе поведения макета, определенного элементом Panel, которому принадлежит коллекция .

относительно простой панели, таких как Canvas, может иметь значительно лучшую производительность, чем более сложная панель, такие как Сетки.

Каждый раз, когда ребенок UIElement меняет свое положение, он имеет возможность запуска нового прохода системой макета. Поэтому важно понимать события, которые могут вызывать макет , поскольку ненужный вызов может привести к плохим приложениям . Ниже описывается процесс, который возникает при вызове системы макета .

Таким образом, чем глубже ваше дерево, тем больше будет расчет.

Вы должны попытаться избежать массовых изменений макета в то же время и попытаться использовать более простые панели в шаблонах (DataTemplate и ControlTemplate)

И эта ссылка предлагает более подробную информацию In what order are Panels the most efficient in terms of render time and performance?

2) Rendering

Это связано с реализацией WPF-рендеринга. BitmapEffect - пример.

Растровые эффекты WPF отображаются в программном режиме. Любой объект, который применяет эффект , также будет отображаться в программном обеспечении. Производительность ухудшилась при использовании эффектов растрового изображения для больших визуальных эффектов или анимационных свойств эффекта растрового изображения. Это не означает, что вы не должны использовать эффекты Bitmap таким образом вообще, но вы должны использовать осторожность и тщательно изучить, чтобы убедиться, что ваши пользователи получают , который вы ожидаете.

0

Я просто использовать WPF TreeListView. «Телерик» не работал для нас, по крайней мере, недостаточно быстро.

http://www.wpftreelistview.com

Пробовал пару других сетей, но пошел с более голые кости быстрее реализации они имели.

Смежные вопросы