UI and data
virtualization overview
План


Проблема

Решение
Проблема

Часто нужно отображать большие
линейные списки

Можно предложить делать пейджинг,
древовидные структуры и т.п., но
заказчик может упираться
Проблема

Отображение списка из тысячи записей
— это создание как минимум тысячи UI
элементов

Большое дерево UI элементов очень
сильно ухудшает производительность
Проблема

Item 1
             visible area
Item 2
Item 3
Item ...
Item N     rendered content
Решение

Item 1
           visible area
Item 2            rendered content


Item 3
Item ...
Item N
VirtualizingStackPanel

Встроенное решение UI виртуализации
для ItemsControl

По умолчанию включено в ListBox и
ListView

Recycling и Standard режимы
VirtualizationMode=Standard


       Item 1
                  visible area
       Item 2            rendered content


       Item 3
       Item ...   Невидимые элементы
                  удаляются из памяти
       Item N
VirtualizationMode=Standard


  Используется по умолчанию

  Удаление и пересоздание UI элементов
  может негативно влиять на
  производительность
VirtualizationMode=Recycling


       Item 1
                  visible area
       Item 2            rendered content


       Item 3
                    Невидимые элементы
       Item ...    не удаляются из памяти,
                     а переиспользуются
       Item N
VirtualizationMode=Recycling



  Не включено по умолчанию

  Могут иногда возникать проблемы при
  отображении UI элементов
Потенциальные
    проблемы

Могут иногда возникать проблемы при
отображении UI элементов

Проблемы с группировкой
Data virtualization

Подгрузка данных при скроллинге

Выигрываем в памяти — проигрываем в
быстродействии

Нет стандартного решения,
предоставляемого .NET
Применение в
      проектах
Надо быть осторожным и измерять
влияние на быстродействие

Пробуйте применять и Standard, и
Recycling режимы, и смотрите, какой
более подходит в данном конкретном
случае

UI virtualization in WPF