Я использую StackPanel для компоновки нескольких элементов управления по вертикали (т. Е. Названия, субтитров, списка, разделителя, списка и т. Д.).Повысить производительность для огромного списка в StackPanel?
StackPanel является дочерним элементом ScrollViewer, гарантируя, что его содержимое всегда прокручивается.
Одним из элементов управления в StackPanel является ListBox.
Его ItemsSource - это данные, привязанные к огромной коллекции, а сложный DataTemplate используется для реализации каждого элемента.
К сожалению, я получаю очень низкую производительность (высокий уровень/память).
Я попытался
- установка ItemsPanel в ListBox, чтобы в VirtualizingStackPanel и
- перекрывая его ControlTemplate только в ItemsPresenter (удалить ScrollViewer в ListBox в).
Но не было никакой разницы в характеристиках. Я предполагаю, что StackPanel дает своим внутренним детям бесконечную высоту во время измерения?
Когда я заменил ScrollViewer и StackPanel другими панелями/макетами (например, Grid, DockPanel), и производительность значительно улучшилась, что заставляет меня поверить, что узкое место, а также решение, находятся в виртуализации.
Есть ли способ улучшить производительность процессора/памяти этого вида?
[Update 1]
Оригинальный проект Пример: http://s000.tinyupload.com/index.php?file_id=29810707815310047536
[Update 2]
Я попытался Рестайлинг/шаблонный TreeView/TreeViewItems придумать следующий пример. Это все еще занимает много времени, чтобы начать/то же, использование высокой памяти. Но после загрузки прокрутка чувствует себя намного более отзывчивой, чем исходный образец.
Удивительно, если есть какой-либо другой способ дальнейшего улучшения времени запуска/использования памяти?Проект
рестайлинг TreeView: http://s000.tinyupload.com/index.php?file_id=00117351345725628185
[Update 2] Решение
pushpraj работает как шарм
- Оригинал:
- Startup: 35s,
- памяти : 393 МБ
- скроллинг: Slow
- TreeView:
- запуска: 18s,
- 377MB памяти,
- скроллинг: Fast
- pushpraj в раствор:
- Startup : < 1s,
- Память: 20MB,
- скроллинг: Fast
Крепеж макс высоту ListBox была бы вызвать 2 скроллбары появляться (см http://i.imgur.com/s1MJ6BO.png?1) – jayars
Это правда, но в то же время виртуализация может работать только при фиксированной высоте или максимальной высоте, она не может работать неограниченно. Возможно, вы можете использовать составную коллекцию, объединив все элементы в панели стека и отобразив все их в списке с включенной виртуализацией. вы можете поделиться этим кодом, я постараюсь вам помочь в этом. – pushpraj
Обновлено, чтобы включить образец проекта – jayars