Рендеринг потока все еще медленный после виртуализации - PullRequest
0 голосов
/ 12 сентября 2011

На высоком уровне мое приложение применяет около 5 различных DataTemplates к набору ListBoxItems в зависимости от их типа.Эти элементы располагаются на холсте в определенных точках x, y.Я реализовал виртуализацию в своем ListBox, и она, похоже, не улучшила время, необходимое для завершения процессов потока рендеринга.Все еще требуется около 8-12 секунд, чтобы пользовательский интерфейс был полностью загружен и использовался пользователем.Я думал, что виртуализация поможет решить эту проблему, но, посмотрев вокруг, похоже, что она только помогает обрабатывать прокрутку больших объемов данных.Правильно ли я в этом предположении и есть ли у кого-нибудь еще какие-либо советы по улучшению потока рендеринга.Это единственная проблема, с которой я столкнулся, и тогда мой проект завершен.Спасибо StackOverflow!

Ответы [ 3 ]

1 голос
/ 12 сентября 2011

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

Похоже, у вас большие проблемы с остальной частью приложения. Вы выполняете все операции загрузки в фоновом потоке? Действительно ли дерево управления пользовательским интерфейсом очень сложное? Вы показываете 100 или 1000 единиц?

1 голос
/ 12 сентября 2011

У нас также было много проблем с производительностью в WPF. Лучший способ, конечно, профилировать вашу заявку. Для этого мы используем профилировщик ANTS Performance, но подойдет любой профилировщик .NET. Мы получили огромный выигрыш в производительности благодаря поиску наших ресурсов XAML. Вот совет, который я могу вам дать: Попробуйте минимизировать все ресурсы в XAML. Но не только это, но и попытайтесь минимизировать количество файлов XAML, которые у вас есть. Одна вещь, которую вы можете попробовать, это отложить загрузку сложных частей вашего DataTemplate. Аналогично тому, что происходит, когда вы загружаете JPEG в браузер, сначала вы увидите пиксельное изображение, которое будет лучше после завершения загрузки JPEG. Для этого сначала используйте более простой DataTemplate, а затем, если это видно, загружайте сложный шаблон только по требованию или через некоторое время. Но без дополнительной информации о вашей конкретной проблеме мы можем только догадываться. Это - мой старый вопрос о похожей теме, может быть, это поможет.

0 голосов
/ 12 сентября 2011

Да, виртуализация ListBox предназначена для прокрутки. Если в ListBox имеется большое количество элементов, при включении виртуализации будут отображаться только видимые элементы (+ несколько дополнительных элементов для прокрутки), а прокрутка ListBox заменяет данные в отображаемых элементах вместо отображения новых элементов.

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

...