Как улучшить производительность выгрузки ContentControl
Я разрабатываю приложение WPF с использованием MVVM с подходом ViewModel-First. Распространенным способом навигации по страницам в ViewModel-First является установка ViewModel в качестве содержимого ContentControl. При использовании DataTemplates отображается правильный вид.
Замена содержимого ContentControls может привести к проблемам с производительностью, если заменяемое представление имеет сложное дерево визуалов. Он должен быть выгружен, что означает, что все дерево рекурсивно очищено. Это подробно объясняется в этом посте. Я заметил, что это зависит от устройства, но может занять до 10 секунд, чтобы выгрузить сложную страницу.
В настоящее время я нашел 2 решения этой проблемы:
- Используйте меньшие представления или используйте элементы управления с виртуализацией: разделив представление на разные страницы или используя TabControl, проблему можно решить (частично). Однако остается вопрос, когда представление становится слишком большим?
- Используйте ItemsControl, который содержит все предыдущие страницы, поэтому выгрузка никогда не требуется. Это решение предлагается здесь и здесь. Это решение может иметь недостатки с кодом, который пересекает дерево визуалов и логики и может вызывать другие проблемы с производительностью, поскольку все предыдущие представления хранятся в памяти.
Можно ли повысить производительность выгрузки ContentControl, не приведя к одному из упомянутых решений?