将ICollectionView与实体框架一起使用时内存不足
本文关键字:内存不足 一起 框架 ICollectionView 实体 | 更新日期: 2023-09-27 17:59:05
因此,在我的应用程序中,我使用产品的ICollectionView,它绑定到具有DataBinding的DataGrid。产品来自一个MS-SQL表,该表非常大(约30000个条目)。在某些情况下,我需要重新加载该表,因为它的内容可能已经更改。
每当我调用ReloadProducts()时,大约会创建30000个新对象。以前的对象不会被释放,而是在应用程序的整个生命周期中保留在内存中。
你知道我怎么能强行处理这些旧东西吗?
ViewModel:
private ICollectionView _productCollectionView;
public ICollectionView ProductCollectionView
{
set { _productCollectionView = value; }
get
{
if (_productCollectionView == null)
{
ReloadProducts();
}
return _productCollectionView ;
}
}
public void ReloadProducts()
{
List<Products> productList = Entities.Products.ToList();
ProductCollectionView = CollectionViewSource.GetDefaultView(productList);
NotifyPropertyChanged("ProductCollectionView");
}
视图:
<DataGrid ItemsSource="{Binding ProductCollectionView}" AutoGenerateColumns="False"/>
尽量不使用collection的视图。绑定将连接到集合本身的视图。
只需使用这样的东西:
private ObservableCollection<Products> _productCollectionView;
public ObservableCollection<Products> ProductCollectionView
{
set { _productCollectionView = value; }
get
{
if (_productCollectionView == null)
{
ReloadProducts();
}
return _productCollectionView ;
}
}
public void ReloadProducts()
{
ProductCollectionView.Clear();
ObservableCollection<Products> ProductCollectionView =
new ObservableCollection<Products>(Entities.Products.ToList());
}