Как улучшить производительность выгрузки ContentControl

Я разрабатываю приложение WPF с использованием MVVM с подходом ViewModel-First. Распространенным способом навигации по страницам в ViewModel-First является установка ViewModel в качестве содержимого ContentControl. При использовании DataTemplates отображается правильный вид.

Замена содержимого ContentControls может привести к проблемам с производительностью, если заменяемое представление имеет сложное дерево визуалов. Он должен быть выгружен, что означает, что все дерево рекурсивно очищено. Это подробно объясняется в этом посте. Я заметил, что это зависит от устройства, но может занять до 10 секунд, чтобы выгрузить сложную страницу.

В настоящее время я нашел 2 решения этой проблемы:

  1. Используйте меньшие представления или используйте элементы управления с виртуализацией: разделив представление на разные страницы или используя TabControl, проблему можно решить (частично). Однако остается вопрос, когда представление становится слишком большим?
  2. Используйте ItemsControl, который содержит все предыдущие страницы, поэтому выгрузка никогда не требуется. Это решение предлагается здесь и здесь. Это решение может иметь недостатки с кодом, который пересекает дерево визуалов и логики и может вызывать другие проблемы с производительностью, поскольку все предыдущие представления хранятся в памяти.

Можно ли повысить производительность выгрузки ContentControl, не приведя к одному из упомянутых решений?

0 ответов

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