Telerik RadTreeListView низкая производительность

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

Посмотрите на этот простой сценарий (zip-проект). Это 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);
}

Откройте его, перетащите, чтобы заполнить высоту экрана, разверните все элементы на несколько уровней глубиной (используя комбо, вверху слева) и прокрутите вокруг - это очень медленно. В моей рабочей версии подобный сценарий совершенно непригоден, и в настоящее время я вынужден циклически перебирать все развернутые строки и отправлять вызовы ExpandHierarchyItems, которые связывают пользовательский интерфейс целую вечность, просто чтобы предотвратить ужасную прокрутку (чрезвычайно медленный / массивный пользовательский интерфейс блокировки, узлы не расширены, нет дочерних элементов, строки на неправильном уровне). Последняя версия telerik WPF, windows 7 x64 - медленнее на i7s, еще медленнее на i5.

Сейчас я сравниваю этот простой сценарий с альтернативами (devexpress и т. Д.) ...

У кого-нибудь есть предложения по улучшению производительности? Или я возьму однозначное "Telerik не может предоставить что-то лучшее, чем это, и (что-то еще) будет" в качестве ответа.

кросс-пост от http://www.telerik.com/community/forums/wpf/treelist/radtreelistview-poor-performance.aspx

3 ответа

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

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

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

1) макет

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

Согласно MSDN, система размещения:

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

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

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

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

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

И эта ссылка предлагает более подробную информацию. В каком порядке панели являются наиболее эффективными с точки зрения времени рендеринга и производительности?

2) Рендеринг

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

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

Прочтите эту статью - вы можете оптимизировать код так, чтобы компоненты Telerik работали так же быстро, как компоненты WPF по умолчанию.

http://jiripik.me/2013/11/14/rendering-of-telerik-wpf-radgridview-and-wpf-datagrid-at-warp-speed/

Я просто использую WPF TreeListView. Telerik не работал для нас, по крайней мере, недостаточно быстро.

http://www.wpftreelistview.com/

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

Другие вопросы по тегам