私のアプリケーションでは、DataBindingを使用してDataGridにバインドされたICollectionViewの製品を使用します。製品はMS-SQLテーブルから来ており、このテーブルは静かで大きなものです(〜30.000エントリ)。ある時点で、内容が変更されている可能性があるため、テーブルをリロードする必要があります。Entity FrameworkでICollectionViewを使用する場合のメモリリーク
ReloadProducts()〜30.000を呼び出すたびに、新しいオブジェクトが作成されます。以前のオブジェクトは解放されず、アプリケーションのライブ全体でメモリに残ります。
どのように古いオブジェクトの処分を強制することができますか?
の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"/>
:
ただ、このようなものを使うのか? – tym32167
この質問のコードを書式設定するときにその行を忘れてしまった。私は私のポストにそれを加えました。 – AlexanderW
どのようにメモリリークがあると判断しますか?メモリプロファイラを使用していますか?あなたはGC.Collect()を手動で呼びますか?なぜあなたはこの場所で正確に漏れていると思いますか? – tym32167