Я тестировал производительность ListBox и ItemsControl для скорости рендеринга элементов при прокрутке большого списка элементов со сложной DataDemplate. Оказывается, в быстром тесте ListBox значительно медленнее, чем ItemsControl. Требуется 9 секунд, чтобы прокрутить весь ItemsControl, в то время как замена его на ListBox занимает 15 секунд (используя PgDown), и даже перетаскивание большого пальца прокрутки вызывает больше медлительности sh.
Эти два элемента управления используются в тесте.
<ListBox x:Name="itemsControl"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.VirtualizationMode="Recycling"
VirtualizingPanel.CacheLength="1,1"
VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Visible"
Background="Transparent"
HorizontalContentAlignment="Stretch"
>
</ListBox>
65% медленнее по сравнению с:
<ItemsControl x:Name="itemsControl"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.VirtualizationMode="Recycling"
VirtualizingPanel.CacheLength="1,1"
VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Visible"
Background="Transparent"
HorizontalContentAlignment="Stretch"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate>
<ScrollViewer>
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
Есть ли что-то, что нужно изменить ListBox для улучшения производительности?