Рендеринг элементов ListBox на 65% медленнее, чем ItemsControl. Есть ли способ повысить скорость? - PullRequest
0 голосов
/ 23 января 2020

Я тестировал производительность 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 для улучшения производительности?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...