Я использую телерик RadTreeListView в своем приложении .NET 6 WPF и испытываю очень плохую производительность при прокрутке.
Обновления при использовании колеса прокрутки могут занимать 2 секунды, а быстрое перетаскивание вертикальной полосы прокрутки приводит к скачкам задержки <= 5 секунд.
У меня есть около 350 строк, которые организованы под одним элементом верхнего уровня. Представление имеет 5 столбцов, определенных вручную.
Я профилировал производительность и увидел, что практически все время ЦП, затрачиваемое на поток пользовательского интерфейса, используется для разметки:

Я попытался включить функцию виртуализации, используя атрибуты EnableRowVirtualization, EnableColumnGroupsVirtualization, EnableColumnVirtualization.
Какие шаги я могу предпринять, чтобы улучшить производительность прокрутки?
Обновлено: вот XAML примера проекта, который иллюстрирует мою проблему.
<telerik:RadBusyIndicator Grid.Column = "1" Grid.Row = "1"
BusyContent = "{Binding BusyReason}" IsBusy = "{Binding BusyReason, Converter = {StaticResource stringEmptyConverter}}" >
<telerik:RadTreeListView x:Name = "treeView" ItemsSource = "{Binding Pages, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
AutoGenerateColumns = "False" AutoExpandItems = "True"
SelectedItem = "{Binding SelectedPage}"
PreviewMouseRightButtonDown = "RadTreeListView_PreviewMouseRightButtonDown" IsDragDropEnabled = "False"
PreparedCellForEdit = "treeView_PreparedCellForEdit"
BeginningEdit = "treeView_BeginningEdit"
CanUserDeleteRows = "False"
EnableRowVirtualization = "True"
EnableColumnGroupsVirtualization = "False"
EnableColumnVirtualization = "False"
GroupRenderMode = "Flat"
IsPropertyChangedAggregationEnabled = "False"
>
<telerik:RadTreeListView.ChildTableDefinitions>
<telerik:TreeListViewTableDefinition ItemsSource = "{Binding ChildElements, Mode=TwoWay}"/>
</telerik:RadTreeListView.ChildTableDefinitions>
<telerik:RadTreeListView.Columns>
<telerik:GridViewDataColumn DataMemberBinding = "{Binding Name, TargetNullValue=''}" Header = "ID Name"
Width = "Auto" IsSortable = "False" IsFilterable = "False"/>
<telerik:GridViewComboBoxColumn Header = "ID" DataMemberBinding = "{Binding Id, Mode=TwoWay}"
IsSortable = "False" IsFilterable = "False"
ItemsSource = "{Binding RelativeSource = {RelativeSource AncestorType = {x:Type telerik:RadTreeListView}}, Path=DataContext.Ids}"
Width = "100"
x:Name = "columnWarnId"
IsLightweightModeEnabled = "True"
EmptyText = "not set"
>
<telerik:GridViewComboBoxColumn.EditorStyle>
<Style TargetType = "telerik:RadComboBox" BasedOn = "{StaticResource RadComboBoxStyle}">
<Setter Property = "OpenDropDownOnFocus" Value = "True"/>
</Style>
</telerik:GridViewComboBoxColumn.EditorStyle>
<telerik:GridViewComboBoxColumn.ItemTemplate>
<DataTemplate DataType = "{x:Type dt:DataObject}">
<telerik:Label Content = "{Binding IdName}"/>
</DataTemplate>
</telerik:GridViewComboBoxColumn.ItemTemplate>
</telerik:GridViewComboBoxColumn>
<telerik:GridViewDataColumn DataMemberBinding = "{Binding Ca, TargetNullValue=''}" Header = "Foobar"
IsFilterable = "False"
Width = "65"
x:Name = "columnCa"
/>
<telerik:GridViewDataColumn DataMemberBinding = "{Binding HasChanged, TargetNullValue=''}" Header = "*"
IsFilterable = "False"
IsReadOnly = "True">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock Visibility = "{Binding HasChanged, Converter = {helpers:BooleanToVisibilityConverter}}" Text = "*"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn DataMemberBinding = "{Binding WarningsPresent, TargetNullValue=''}" Header = "Warning"
IsFilterable = "False"
IsReadOnly = "True">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<Image HorizontalAlignment = "Center" Visibility = "{Binding WarningsPresent, Converter = {helpers:BooleanToVisibilityConverter}}" Source = "pack://application:,,,/Resources/Images/icons8-fehler-48.png"
Stretch = "Uniform"
MaxHeight = "24"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
</telerik:RadTreeListView.Columns>
</telerik:RadTreeListView>
</telerik:RadBusyIndicator>
В этом примере не было ошибок привязки. Я не знаю, какой элемент должен предлагать свойство TreeDerivationMode, поэтому я не могу проверить, какое значение ему присвоено.





Поддержка телерика предложила обратную связь.
Проблема с производительностью связана с тем, что в моем случае отображается ~ 200 записей (одинаковые для каждой строки).
Это известная проблема, которая не считается ошибкой Telerik с 2015 года.
Основная причина в том, что базовый GridViewComboBoxColumn оценивает свое содержимое, даже если оно не расширено. Когда я удалил RadComboBox из GridViewComboBoxColumn, производительность подскочила до приемлемого уровня в режиме отладки и хорошей производительности в режиме выпуска.
На странице поддержки, указанной выше, предлагается переписать коллекцию элементов ComboBox в словарь, чтобы улучшить внутреннюю производительность телерика.
Можете ли вы предоставить XAML.. какое свойство вы используете. Каково значение TreeDerivationMode? Также вы можете исследовать свое окно вывода - возможно, будут ошибки привязки.