Когда я привязываю ItemsSource ListBox к списку, механизм привязки удерживает элементы списка после того, как элемент управления исчез. Это приводит к тому, что все элементы списка остаются в памяти. Проблема исчезает при использовании ObservalbleCollection. Почему это происходит?
XAML внутри тега окна
Код: Выделить всё
GC
Код: Выделить всё
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.DataContext = null;
ContentControl.Content = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
Код: Выделить всё
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; }
}
Источник: https://stackoverflow.com/questions/195 ... emory-leak