Поделиться через


Оптимизация производительности: элементы управления

Обновлен: Июль 2008

Windows Presentation Foundation (WPF) включает множество общих компонентов интерфейса пользователя, которые используются в большинстве приложений Windows. В этом разделе содержатся методы повышения производительности пользовательского интерфейса.

В этом разделе содержатся следующие подразделы.

  • Отображение больших наборов данных
  • Повторное использование контейнера
  • Поддержка двунаправленной виртуализации
  • Оптимизация шаблонов
  • Отложенная прокрутка
  • Элементы управления, реализующие настройку производительности
  • Связанные разделы

Отображение больших наборов данных

Элементы управления WPF, такие как ListView и ComboBox, используются для отображения списков элементов в приложении. Если список для отображения большой, это может повлиять на производительность приложения. Это происходит потому, что стандартная система разметки создает контейнер разметки для каждого элемента, связанного с элементом управления в списке, и вычисляет размер и позицию разметки. Обычно не требуется отображать все элементы одновременно, вместо этого отображается некоторое подмножество, и пользователь прокручивает список. В этом случае, затрагивается виртуализация пользовательского интерфейса, и в результате генерирование контейнера элементов и вычисление связанной разметки замедляется, пока отображается элемент.

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

По умолчанию виртуализация пользовательского интерфейса включена для элементов управления ListView и ListBox, когда их элементы списка привязаны к данным. Виртуализацию TreeView можно включить установкой для вложенного свойства VirtualizingStackPanel.IsVirtualizing значения true. Если нужно включить виртуализацию пользовательского интерфейса для настраиваемых элементов управления, производных от класса ItemsControl, или существующих элементов управления, использующих класс StackPanel, таких как ComboBox, можно установить свойство ItemsPanel для класса VirtualizingStackPanel и задать для свойства IsVirtualizing значение true. К сожалению, можно отключить виртуализацию пользовательского интерфейса, не зная этого. Далее представлен список условий, отключающих виртуализацию пользовательского интерфейса.

В настоящее время элементы управления WPF не предлагают встроенную поддержку виртуализации данных.

Повторное использование контейнера

В пакет обновления 1 (SP1) для платформы .NET Framework 3.5 добавлена оптимизация виртуализации пользовательского интерфейса для элементов управления, наследующих от класса ItemsControl, — повторное использование контейнера, также это может повысить быстродействие прокрутки. Когда объект ItemsControl, использующий виртуализацию пользовательского интерфейса, заполняется, создается контейнер элементов для каждого отображаемого при прокрутке элемента, и контейнер элементов удаляется, когда элемент в результате прокрутки не отображается. Повторное использование контейнера позволяет элементу управления повторно использовать существующие контейнеры элементов для различных элементов данных, чтобы контейнеры элементов не создавались и не удалялись постоянно при прокрутке пользователем объекта ItemsControl. Можно выбрать повторное использование элементов, установив для VirtualizationMode свойство Recycling.

Повторное использование контейнера не используется при выполнении любого из следующих условий:

  • Контейнеры элементов добавляются напрямую к элементу управления ItemsControl. Например, объекты ListBoxItem добавляются к элементу управления ListBox. Дополнительные сведения о контейнерах элементов см. подраздел "ItemsControl" в разделе Обзор модели содержимого элементов управления.

  • Объект ItemsControl содержит контейнеры элементов различных типов. Например, объект Menu, использующий объекты Separator, не может реализовать повторное использование элементов, так как Menu содержит объекты типа Separator и MenuItem.

При повторном использовании контейнеров элементов важно решить, имеются ли дополнительные сведения о состоянии, связанные с контейнером элемента, принадлежащем этому элементу. В этом случае, необходимо сохранить дополнительное состояние. Например, элемент может находиться в элементе управления Expander, и состояние IsExpanded привязано к контейнеру элемента, а не к самому элементу. Если контейнер повторно используется для нового элемента, текущее значение свойства IsExpanded используется для нового элемента. Дополнительно, старый элемент теряет правильное значение IsExpanded.

Любой объект ItemsControl, поддерживающий виртуализацию, может повторно использовать контейнер. Пример, как включить повторное использование контейнера для ListBox, см. в разделе Практическое руководство. Улучшение производительности прокрутки ListBox.

Поддержка двунаправленной виртуализации

VirtualizingStackPanel предлагает встроенную поддержку виртуализации пользовательского интерфейса в одном направлении — горизонтально или вертикально. Если нужно использовать двунаправленную виртуализацию для элементов управления, необходимо реализовать настраиваемую панель, расширяющую класс VirtualizingStackPanel. Класс VirtualizingStackPanel предоставляет виртуальные методы, такие как OnViewportSizeChanged, LineUp, PageUp и MouseWheelUp.Эти виртуальные методы позволяют обнаружить изменение в видимой части списка и соответственно его обработать.

Оптимизация шаблонов

Визуальное дерево содержит все визуальные элементы в приложении. Дополнительно к непосредственно созданным объектам оно также содержит объекты для возможного расширения шаблона. Например, при создании объекта Button в визуальном дереве также создаются объекты ClassicBorderDecorator и ContentPresenter. Без оптимизации шаблонов элементов управления в визуальном дереве может быть создано большое число дополнительных ненужных объектов. Для отслеживания элементов в визуальном дереве и удаления любых ненужных элементов в шаблонах можно использовать XAMLPad. Дополнительные сведения о визуальном дереве см. в разделе Обзор графической визуализации Windows Presentation Foundation.

Отложенная прокрутка

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

Чтобы реализовать отложенную прокрутку, задайте для свойства IsDeferredScrollingEnabled значение true. IsDeferredScrollingEnabled является вложенным свойством и может быть задано в объекте ScrollViewer и в любом элементе управления, имеющем ScrollViewer в его шаблоне элементов управления.

Элементы управления, реализующие настройку производительности

В следующей таблице перечислены общие элементы управления для отображения данных и их поддержка настройки производительности. Сведения о том, как включить эти настройки, см. в предыдущих разделах.

Элемент управления

Виртуализация

Повторное использование контейнера

Отложенная прокрутка

ComboBox

Можно включить

Можно включить

Можно включить

ContextMenu

Можно включить

Можно включить

Можно включить

DocumentViewer

Недоступно

Недоступно

Можно включить

ListBox

По умолчанию

Можно включить

Можно включить

ListView

По умолчанию

Можно включить

Можно включить

TreeView

Можно включить

Можно включить

Можно включить

ToolBar

Недоступно

Недоступно

Можно включить

Cc716879.alert_note(ru-ru,VS.90).gifПримечание.

Пример, как включить виртуализацию и повторное использование контейнера для TreeView, см. в разделе Практическое руководство. Повышение производительности элемента управления TreeView.

См. также

Основные понятия

Система макета

Оптимизация производительности: разметка и разработка

Оптимизация производительности: привязка данных

Общие сведения об элементах управления

Стилизация и использование шаблонов

Журнал изменений

Дата

Журнал

Причина

Июль 2008

Добавлен раздел для платформы .NET Framework 3.5 с пакетом обновления 1 (SP1).

Изменение функции SP1.