Привязка к списку вызывает утечку памятиC#

Место общения программистов C#
Anonymous
Привязка к списку вызывает утечку памяти

Сообщение Anonymous »


Когда я привязываю ItemsSource ListBox к списку, механизм привязки удерживает элементы списка после того, как элемент управления исчез. Это приводит к тому, что все элементы списка остаются в памяти. Проблема исчезает при использовании ObservalbleCollection. Почему это происходит?

XAML внутри тега окна
Code behind:

Код: Выделить всё

public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
this.DataContext = null;
ContentControl.Content = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
ViewModel

Код: Выделить всё

class ViewModel : INotifyPropertyChanged
{
//Implementation of INotifyPropertyChanged ...

//Introducing ObservableCollection as type resolves the problem
private IEnumerable _list =
new List { new Person { Name = "one" }, new Person { Name = "two" } };

public IEnumerable List
{
get { return _list; }
set
{
_list = value;
RaisePropertyChanged("List");
}
}

class Person
{
public string Name { get; set; }
}
Edit: To check the leaking of the person istances, I used ANTS and .Net memory profiler. Both show that after pushing the GC-button only the binding engine is holding reference to the person objects.


Источник: https://stackoverflow.com/questions/195 ... emory-leak

Вернуться в «C#»