将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"/>

将ICollectionView与实体框架一起使用时内存不足

尽量不使用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());
    }