Как избежать отрывистых анимаций при добавлении нескольких пользовательских элементов управления? - PullRequest
0 голосов
/ 06 августа 2009

У меня есть приложение Silverlight, в которое я периодически загружаю дополнительные данные и добавляю их на страницу как UserControls. Я загружаю около 25 объектов в одном наборе и создаю один UserControl для каждого объекта.

Это в конечном итоге занимает совсем немного времени! Загрузка 25 объектов занимает 50-150мс исключительно в пользовательском интерфейсе. Это делает мои анимации довольно резкими, что очень нежелательно.

Есть ли способ ускорить загрузку пользовательских элементов управления? Я бы предпочел не добавлять какой-либо слой буферизации, который загружает X элементов в секунду. Я также не предпочел бы предварительно загружать какой-либо большой буфер объектов пользовательского интерфейса, который я бы использовал для зомбифинга / повторного использования в зависимости от объема поступающих данных. Однако в настоящее время я не могу думать о каких-либо других параметрах.

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

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

Ответы [ 2 ]

0 голосов
/ 15 января 2010

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

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

0 голосов
/ 06 августа 2009

Я не совсем уверен, как ваша анимация связана с созданием объектов пользовательского интерфейса, так что, возможно, я что-то упустил. Просто чтобы быть искренним, единственные решения, о которых я знаю, - это то, что, как вы сказали, вы не хотите преследовать. Я хотел бы создать новые объекты пользовательского интерфейса перед запуском анимации с установленной свернутой видимостью. После этого анимация может изменить элементы пользовательского интерфейса Visibility в соответствующее время, чтобы сделать их видимыми. При создании объектов пользовательского интерфейса возникают накладные расходы (50-150 мс, о которых вы говорите, звучат не совсем по линии, не зная, что делают объекты), от которых вы не можете уйти. Вы можете убедиться, что ваши объекты пользовательского интерфейса не выполняют никакой ненужной работы в конструкторе или обработчике событий Loaded. Мое общее мнение о проблемах производительности заключается в том, что вам нужно тестировать, а не теоретизировать, поэтому я попробую несколько вариантов и выясню, какая из них дает желаемую производительность.

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