Проблемы с производительностью WPF InitializeComponent

У меня есть приложение WPF (.NET 4), в котором есть главное окно, а внутри этого главного окна отображается множество меньших UserControls . Различные действия, выполняемые пользователем, приводят к тому, что отображаемые элементы управления заменяются другими элементами управления с другими данными.

Однако при переключении этих элементов управления у меня возникают проблемы с производительностью. Поток диспетчера WPF переходит на 100% ЦП при загрузке элементов управления. На старых машинах или с большим количеством элементов управления это может привести к тому, что приложение будет зависать на 30 секунд!

Профилирование показывает, что почти все это время ЦП тратится на вызов различных InitializeComponent всех различных UserControls - ни один элемент управления не выглядит значительно хуже, чем любой другой, все они занимают от 0,2 до 0,5 секунды (на моей машине разработчика с быстрым процессором и хорошей видеокартой ).

Насколько мне известно, InitializeComponent - это то место, где WPF фактически загружает скомпилированный xaml в память.

Я не понимаю, что здесь делать. Я хотел бы предварительно инициализировать вещи в фоновом потоке, но все элементы управления WPF должны быть созданы и использоваться в потоке диспетчера, поэтому я не думаю, что это возможно.

В противном случае похоже, что единственные варианты, которые у меня есть, - это удалить все мои xaml ??

Приветствуем любую помощь

7
задан Orion Edwards 24 November 2010 в 03:06
поделиться