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