LoadComponent()
уже загружается .baml
, не беспокойтесь об этом бите вопроса. Microsoft сделала это намеренно, чтобы разработчики не создавали зависимости от формата baml
. В дальнейшем они могут улучшить формат, не нарушая существующие приложения.
Да, есть и другие способы заставить его работать быстрее. Первая оптимизация - это виртуализация пользовательского интерфейса . WPF уже поставляется с удобной VirtualizingStackPanel . Он работает в тандеме с ItemsControls и имеет определенные ограничения (например, если вы создаете контейнеры элементов и добавляете их по своему усмотрению, вы теряете виртуализацию или если вы устанавливаете ScrollViewer.CanContentScroll="False"
, вы теряете ее снова). Чтобы использовать виртуализацию, вам, вероятно, придется переписать ваше приложение в стиле ItemsControl + DataBinding
(ListBox
уже имеет виртуализацию включена)
Если вам нужно больше информации о виртуализации пользовательского интерфейса, обратитесь к блогу Дэна Кревье .
И последний совет. Вы можете попробовать переписать свои пользовательские элементы управления в пользовательские элементы управления. Мой простой тест производительности показал следующие цифры. Для создания элементов управления 10K с тем же визуальным деревом потребовалось:
- для UserControl: 4932ms ;
- для CustomControl: 86мс; (~ в 57 раз быстрее)
Надеюсь, это поможет