2013-08-16 2 views
1

Предположим, у меня есть большая страница XAML. На этой странице представлены десятки текстовых полей, кнопок и т. Д., И эти элементы управления должны отображаться/скрываться/модифицироваться на основе различных условий (разрешений, состояний модели представления, независимо от них). Двумя возможными подходами для настройки визуальных переходов являются:Является ли привязка или визуальное состояние предпочтительным для производительности?

  1. Использование визуального государственного менеджера; bind the state transitions на свойства в представлении-модели
  2. Привязка свойств управления в их соответствующих свойств вид-модели, с помощью преобразователей, где это применимо (BOOL к видимости, строка к цвету, и т.д.)

Мой вопрос : чисто с точки зрения производительности (скорость и объем памяти), является ли один или другой подход явно лучше? Является ли второй подход, загружая страницу со связями, способный взвесить его? Или разница может быть незначительной?

ответ

1

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

Для связывания сценария:

  • Каждого связывания с точки зрения вызывает обработчик события, чтобы быть инициирован каждый раз, когда PropertyChanged поднимается.
  • Каждый из этих обработчиков должен быть выполнен каждые время любой вид изменения модели собственности.
  • Аналогично, если вы измените свойства модели просмотра на то, чтобы обновить конфигурацию представления, все обработчики должны быть запущены для каждого имущества, которое вы меняете.

Государственный сценарий визуального не имеет ни одного из этих обработчиков маслобойки через:

  • VisualStateManager не имеет обработчиков, поэтому он не потребляет процессор, когда он не нужен (он игнорирует «PropertyChanged», или в худшем случае, имеет только один прослушиватель, прикрепленный к свойству CurrentState.
  • Для запуска визуального состояния требуется только, чтобы приложенная раскадровка была запущена - PropertyChanged не поднимается (за исключением, может быть, одного раза, в лучшем случае, как указано выше), и поэтому все обработчики не должны запускаться несколько раз.

Похоже, что лучше использовать Visual State Manager для повышения производительности, чем для создания избыточных привязок к представлению-представлению.


Редактировать Джон Госсман также noted (давно), что переплеты могут быть тяжелыми, и может начать потреблять лишнюю память в больших приложениях. В связанной статье он утверждает, что сохранил 100 МБ, заменив все привязки на один статический обратный вызов.