У меня проблема с элементом управления WPF TreeView.
Я думаю, что столкнулся с проблемой утечки памяти с этим элементом управления, а также с некоторыми проблемами производительности.
Я подготовил простое демонстрационное решение, где вы можете увидеть эти проблемы.
Ссылка для скачивания: http://www.custom -projects.com / TreeViewMemoryAndPerformanceIssue.zip
Я создаю дерево на основе некоторых доменных объектов. Объекты обернуты в моделях представления.
Количество уровней не ограничено, но в настоящее время у нас есть максимум 3 уровня.
Итак, каждая модель представления может иметь детей.
Если вы нажмете на кнопки вверх / вниз элемента управления UpDown и не отпустите кнопку мыши, вы увидите, что скорость обновления значения int будет становиться все медленнее и медленнее, а потребление памяти постоянно возрастает.
Что я делаю: когда вы нажимаете на кнопку вверх / вниз, значение отправляется в модель представления через привязку данных. В сеттере я поднимаю событие. Наше приложение состоит из разных моделей представлений, и если кто-то изменяет данные в одной из них, другие уведомляются об этих событиях DataChanged.
Для простоты мои демонстрационные решения состоят только из NavigationViewModel. Так слушает
для события DataChanged и, если оно запущено, дерево отображается.
Поскольку у нас нет списка, который всегда будет одинаковым (и только строки добавляются или удаляются), я не использую ObservableCollection. Мы всегда должны регенерировать список на основе объектов, которые пользователь добавил / создал.
В любом случае, я добавляю эти модели представлений в список и вызываю событие NotifyPropertyChanged.
так что WPF обновляет дерево. Работает хорошо, но чем больше обновляется список, тем медленнее становится приложение (и увеличивается объем памяти).
Я проверил, что модели представления элементов собраны мусором, и я не вижу
что-то не так на моей стороне. Я также провел профилирование производительности. Похоже, что
проблема на стороне WPF, потому что мой код не замедляется. Метод Application.Run
Время исполнения увеличивается ... Странная вещь.
Есть ли у кого-нибудь идея, почему память растет и никогда не освобождается и почему
производительность начинает снижаться, как часто обновляется TreeView?
Буду признателен за любую помощь или комментарий по этому вопросу.
Спасибо,
Christian