Утечка памяти с CollectionViewSource.GetDefaultView () в WPF? - PullRequest
4 голосов
/ 30 сентября 2010

Мне интересно, каковы лучшие практики для работы с CollectionViews в WPF, в частности использование метода CollectionViewSource.GetDefaultView (). Кто-нибудь сталкивался с какими-либо проблемами с использованием GetDefaultView? Мы обеспокоены тем, что это может вызвать утечки памяти.

Как правило, рекомендуется создавать списки ListCollectionViews вручную, а не полагаться на GetDefaultView ()?

Как WPF управляет этими представлениями? Они получают GC'd, когда коллекция делает? Я видел несколько статей, в которых говорилось, что вам нужно отключить CollectionViews от их исходной коллекции, иначе у вас будет утечка памяти.

Спасибо за помощь!

1 Ответ

2 голосов
/ 02 февраля 2011

Беа утверждает, что использование CollectionViewSource.GetDefaultView() является ее любимым способом доступа к представлению данной коллекции.Кроме того, лично я никогда не сталкивался с какими-либо проблемами, связанными с использованием CollectionViewSource.GetDefaultView(), однако это, безусловно, возможно в данном сценарии.

Вы должны понимать, что каждая коллекция имеет представление по умолчаниюи что, когда вы связываете заданное свойство с заданной коллекцией, WPF автоматически оборачивает коллекцию представлением и связывается с представлением;не коллекция.

Так как это является частью инфраструктуры WPF, вы должны предположить, что с каждой коллекцией, имеющей связанное с ней представление, она будет затем удалена при утилизации коллекции.Если есть ссылка на коллекцию через связываемое свойство, то существует связанное представление, ссылающееся на коллекцию, независимо от того, делаете ли вы вызов CollectionViewSource.GetDefaultView() или нет, поэтому вы все равно будете в том же положении.

Эмпирическое свидетельство существует, что до тех пор, пока коллекция не выйдет из области видимости, связанные представления не будут GC'ed;однако имейте в виду, что это имеет дело с коллекцией с орудиями INotifyCollectionChanged.

Исходя из ваших обстоятельств, может существовать связь 1: 1 между коллекцией и ассоциированным представлением, и, следовательно, соединение может не создавать никаких помех.В этом сценарии представление о том, что GC'ed после того, как коллекция вышла из области видимости, не является проблемой.

Это сводится к тому, чтобы действовать осторожно и быть уверенным, что вы знаете, что происходит под прикрытием, для болеесложные ситуации, чтобы вы могли принять соответствующие меры.

...