RegionManager Prism отображает производительность переключения

Я выполняю профилирование производительности приложения WPF, написанного с использованием библиотеки PRISM. В этом приложении переход от одного вида к другому особенно медленный, особенно при переходе от "тяжелого" вида. Обратите внимание, что:

  • представления перемещаются в кеш и не восстанавливаются при навигации назад и вперед
    (следствие PRISM, сохраняющего все представления в SingleActiveRegion)
  • Я понимаю, что создание представления может быть медленным в первый раз из-за синтаксического разбора xaml, JIT'ing, .. НО этот вопрос о том, что навигация остается медленной, даже ПОСЛЕ открытия представления в первый раз

Используя библиотеку PRISM, регионы обычно реализуются в ContentControl, например:

<ContentControl regions:RegionManager.RegionName="MAIN" />

Как следствие, переключение представления в области MAIN обновит "Content" этого ContentControl (как видно из исходного кода). Установка и переключение элементов пользовательского интерфейса в качестве "контента" ContentControl имеет побочные эффекты производительности (см. Этот блог).

Чтобы преодолеть это поведение, я реализовал пользовательский RegionAdapterBase ( CachingGridRegionAdapter.cs) для Grid, который в основном добавляет все представления, по которым осуществляется навигация как дочерние, и скрывает все неактивные представления.

Прирост производительности огромен; переход от одного вида к другому теперь мгновенный. Вопрос: есть ли недостатки этого подхода?

  • Что касается памяти, я не вижу проблемы, так как PRISM все равно хранит в памяти все представления
  • есть ли недостаток в том, чтобы иметь большое визуальное дерево со многими частями, имеющими Visibility = Collapsed?


Если есть другие способы преодоления этой проблемы, пожалуйста, дайте мне знать.


Спасибо за ваше время,
Koen

0 ответов

Другие вопросы по тегам