У меня есть приложение WPF (.NET 4), в котором есть главное окно, а внутри этого главного окна отображается множество меньших UserControls
. Различные действия, выполняемые пользователем, приводят к тому, что отображаемые элементы управления
заменяются другими элементами управления с другими данными.
Однако при переключении этих элементов управления у меня возникают проблемы с производительностью. Поток диспетчера WPF переходит на 100% ЦП при загрузке элементов управления. На старых машинах или с большим количеством элементов управления это может привести к тому, что приложение будет зависать на 30 секунд!
Профилирование показывает, что почти все это время ЦП тратится на вызов различных InitializeComponent
всех различных UserControls
- ни один элемент управления не выглядит значительно хуже, чем любой другой, все они занимают от 0,2 до 0,5 секунды (на моей машине разработчика с быстрым процессором и хорошей видеокартой ).
Насколько мне известно, InitializeComponent
- это то место, где WPF фактически загружает скомпилированный xaml в память.
Я не понимаю, что здесь делать. Я хотел бы предварительно инициализировать вещи в фоновом потоке, но все элементы управления WPF должны быть созданы и использоваться в потоке диспетчера, поэтому я не думаю, что это возможно.
В противном случае похоже, что единственные варианты, которые у меня есть, - это удалить все мои xaml ??
Приветствуем любую помощь