2013-11-12 5 views
1

Имеет ли эффективность рендеринга серьезное снижение в случае, если XAML приложения WPF содержит лот вложенных Grid, StackPanel, DockPanel и других контейнерах?Является ли вложенность контейнеров в XAML влиять на производительность рендеринга?

+1

Попробуй и посмотри? –

+0

@ SonerGönül Интересует фундаментальный ответ (например, что, если CLR оптимизирует этот код определенным образом) –

+3

@ SonerGönül остановить троллинг SO и внести что-то полезное, помимо переформатирования каждого вопроса под солнцем.Этот вопрос сложный и перфорированный, это не тривиальная операция. – Gusdor

ответ

0

WPF использует MeasureOverride и ArrangeOverride методы для рендеринга UIElements. MeasureOverride измерять ширину и размер UIElements на основе элементов управления родительскими элементами. Ширина и размер. ArrangeOVerride способ будет организовывать UIElements во время выполнения на основе этих мер. Эти методы оптимизированы для повышения производительности и не должны вызывать проблемы с производительностью.

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

например: предположим, что на велосипеде могут нести 2 человека. если 5 человек перегружен, что будет :)

Jet Мозги .Trace является инструментом для анализа проблем с производительностью, которая будет помогает увидеть эти два метода

+0

Спасибо, приятель. Я обновлю свой ответ :) –

+1

Эти ответы, похоже, зависят от того, «если вы сделаете это слишком медленно, это будет медленная» логика. – Gusdor

2

При создании очень сложный интерфейс, с большим количеством вложенных объектов и DataTemplate с множеством элементов, вы можете серьезно повлиять на производительность приложения, потому что чем больше UI Tree, тем больше будет рендеринга, и если инфраструктура не сможет отобразить в 30FPS, вы начнете видеть падение производительности. Вы должны использовать самые легкие панели, которые вам нужны, чтобы избежать дополнительной логики, в которой вам не понадобилось. Вот некоторые советы по улучшению производительности для того, чтобы сделать вас App быстрее:

http://msdn.microsoft.com/en-us/library/bb613542(v=vs.110).aspx

+0

Хорошая ссылка, особенно в отношении выбора вашей панели 's тщательно. Никто еще не заметил, что не все панели равны. «Grid» универсален, но его логика визуализации более активна. Если вам действительно не нужно его использовать, не делайте этого! – Olly

+2

Точно, например, в Winwodws 8.1 вся логика, относящаяся к выбору элемента, была удалена, чтобы сделать ItemContainers более тонкими и быстрыми. Я рекомендую вам прочитать этот пост об улучшении производительности в приложениях XSLL для Windows 8.1, поскольку он также применим к приложениям WPF. http://msdn.microsoft.com/en-us/library/windows/apps/hh994641.aspx Надеюсь, что это поможет! – toroveneno

2

Действительно ответ просто «да». Больше всего будет использовать больше процессорного времени. СЮРПРИЗ!

В случае WPF элементы расположены в иерархическом графике . Добавление уровней глубины к этому графику замедлит ваше приложение больше, чем добавление братьев и сестер к существующим элементам. Вы всегда должны стремиться к тому, чтобы глубина графика была низкой. Рассмотрите возможность использования Grid вместо гнездования StackPanel s.

Так почему же глубина важнее, чем счетчик сырого элемента? Ну, глубина обычно подразумевает;

  1. зависимость компоновки - если родитель переделан, ребенок, вероятно, будет повторно отображен.
  2. окклюзия - если два элемента перекрываются, то аннулирование одного может часто приводить к недействительности другого.
  3. Рекурсия - большинство операций с графиком - Связанные с процессором - они полностью зависят от скорости процессора и не имеют специальной аппаратной поддержки (рендеринг использует графический чип там, где это возможно). Затраты на велосипеде по уровням графика для ресурсов и обновлений макетов дорого.

Что касается окклюзии, класс BitmapCache может очень помочь!

Смежные вопросы