Как ускорить динамическое добавление пользовательских элементов управления в wp7 - PullRequest
2 голосов
/ 13 марта 2011

У меня есть страница в моем приложении WP7, которую я создаю динамически.Я создаю и добавляю 60 пользовательских элементов управления в сетку, и это занимает около 5 секунд.Мне нужно найти способ ускорить это.

Процесс выглядит следующим образом:

  1. Создание пользовательского элемента управления
  2. Добавление нового определения строки сетки
  3. Установите значение свойства строки элемента управления
  4. Добавьте элемент управления в коллекцию grid.Children.

Это шаг 4, который требует времени.Я предполагаю, что каждый раз, когда я делаю это, визуальное дерево перестраивается.

Есть ли какой-либо способ указать сетке перестраивать визуальное дерево только после того, как я закончу обновление дочерней коллекции?

Или есть еще лучший способ сделать это?

ОБНОВЛЕНИЕ: проблема связана с элементом управления «Выбор списка» из набора инструментов WP7.Когда я перешел на другой, я написал себе, что время отображения страницы на телефоне сократилось с 25 до 1 секунды.

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Если помогла виртуализация пользовательского интерфейса (т.е. ListBox), проблема должна быть в ваших элементах управления. Шаблоны, привязки, конвертеры, использование Xaml вместо кода C #, ненужные конструкции Xaml (например, имена элементов), слишком сложное визуальное дерево (например, ненужные сетки) и т. Д. - вот те вещи, которые могут ухудшить производительность.

Если вы подозреваете, что инкрементное визуальное дерево перестраивается (я так не думаю), просто отладьте методы MeasureOverride / ArrangeOverride.

Полагаю, эта статья может дать вам больше советов. Я описал, как мы оптимизировали такой же сложный элемент управления - MonthCalendar с 126 субэлементами. Время контрольной нагрузки уменьшилось прибл. 5x!

1 голос
/ 14 марта 2011

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

Несколько предложений:

  • Попробуйте включить (некоторые из) элементы встраницы по умолчанию, но просто измените их видимость в зависимости от того, что вам нужно.
  • Создайте всю сетку в коде и добавьте ее на страницу за один раз (вместо строки за раз)
  • В зависимости от вашего контента, вы можете попробовать использовать ListBox и чередовать шаблон, используемый для каждой строки, чтобы получить различный отображаемый контент.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...