ReactiveUI - просмотр производительности локатора

В моемWPF приложение, которое используетReactiveUIЯ заметил область плохой работы.

У меня есть модель представления, которая содержит много других облегченных моделей представления (думаю, 30). Эти вложенные модели представления просты, обычно представляют собой кнопки. Все они отображаются в пользовательском элементе управления внутриItemsControl который подключен с использованием ReactiveUIOneWayBind, Это означает, что каждый элемент отображается с помощьюViewModelViewHost.

Итак, проблема

На моем мощном настольном ПК при переходе к этой модели вида наблюдается заметная задержка между нажатием кнопки «перейти к модели просмотра» и изменением вида, около 0,5 секунды. Когда я запускаю ту же программу на Power-PC, задержка составляет почти 4 секунды. Это довольно большая проблема с точки зрения UX.

Что я выучил

Я долго пробовал профилировать и отлаживать свой код и не нашел проблемных областей. Zilch (примечание:используя JustMyCode в VS, чтобы ReactiveUI не отображался). Однако я нашел способ устранить проблему. Вместо привязки кItemsControl.ItemSource сOneWayBindЯ сделал это в XAML, как таковой:ItemSource={Binding MyViewModels} и настройкаDataTemplate вручную. Это приводит к гораздо более быстрому переходу.

Когда вы связываете сOneWayBind сItemsControl,ViewModelViewHost автоматически создается для вас, аViewLocator используется, чтобы найти представление для вашей модели представления. Я предполагаю, что это очень медленно по какой-то причине.

Вопрос

Кто-нибудь знает, как я могу обойти это снижение производительности без необходимости вручную определять множество и множество шаблонов данных для ItemsControl? Если у меня есть view-модели моделей-view-моделей, то все становится очень быстро. Из моего прошлого опыта сCaliburn.Microсоглашения о расположении вида были очень быстрыми, поэтому мне также интересно, не использую ли яReactiveUI правильно, и что есть альтернативный подход, который является более быстрым.

Спасибо.

TLDR;

ViewModelViewHost какDataTemplate для ~ 30 view-models приводит к тому, что при начальной загрузке представления становятся очень вялыми, в результате чего пользовательский интерфейс выглядит так, как будто он аварийно завершился. Есть ли способ избежать этого?

Ответы на вопрос(2)

Ваш ответ на вопрос