WPF VirtualizingStackPanel для повышения производительности

Я хотел бы простое описание того, как реализовать панель виртуализации для ItemsControl это связано с ObservableCollection в моем MVVM.

у меня есть ItemsControl экземпляр для каждой вкладки в элементе управления вкладками, и переключение вкладок становится ОЧЕНЬ медленным, когда ItemsControl становится больше.

Что я могу сделать, чтобы ускорить приложение?

Я открыл профилировщик WPF и увидел, что каждый элемент (пользовательский элемент управления), отображаемый в моем ItemsControl каждой вкладки, имеет свой собственный ContentPresenter, Таким образом, у меня было 100 докладчиков контента, работающих на 100 элементов в моем ObservableCollection в МВВМ. Это правильно? Как я могу оптимизировать?

2 ответа

Решение

Есть две техники, которые могут оказать большую помощь. Обе они очень хорошо описаны Бе Стольниц в ее блоге.

Первый - это виртуализация пользовательского интерфейса, а второй - виртуализация данных.

В виртуализации пользовательского интерфейса вы используете такие вещи, как VirtualizingStackPanel, чтобы пользовательский интерфейс рисовал меньше вещей.

Виртуализация данных гарантирует, что вы не внесете в память миллион объектов, когда вы собираетесь показывать только 100.

Таким образом, виртуализация пользовательского интерфейса минимизирует количество элементов, которые можно нарисовать, а виртуализация данных - количество элементов, которые можно нарисовать.

надеюсь, это поможет

У меня была точно такая же проблема в WPF с использованием TabControl и DataGrid. При увеличении размера элемента DataGrid переключение вкладок становится ОЧЕНЬ медленным! После этого я обнаружил этот пост, читая блог от Bea Stolnitz, как и предполагалось предыдущим ответом. Это дало мне подсказку для Google "wpf tabcontrol VirtualizingStackPanel", который дает мне ссылку на DrWPF: http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

Он точно описывает проблему и дает решение:-))

.... Удар перфоратора происходит во время строительства дерева. К сожалению, если
вы используете типичный подход MVVM с привязкой к ItemsSource
свойство TabControl, все дерево должно быть перестроено каждый раз
элемент вкладки выбран. Это обычно очень дорогая операция.....

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