为什么我的CollectionViewSource / ICollectionView泄漏了内存?

时间:2015-11-17 20:44:03

标签: c# wpf memory-leaks

我的应用程序(c#wpf)有一个列表框绑定到一组ViewModels,它们将这些VM显示为单独的UserControls。昨晚我尝试通过从CollectionViewSource创建ICollectionView来实现过滤器,虽然过滤有效,但它正在泄漏内存。似乎每次运行过滤器时都会创建一个额外的集合,而不是处理它。

我真的不知道自己在做什么,而且我主要是在学习。我之前没有以这种方式使用过CollectionViewSource,所以我不熟悉。

过程:

步骤1:填充列表JobTileVMs

第2步:CreateJobFilter()

private void CreateJobFilter(Task obj)
    {
        View = CollectionViewSource.GetDefaultView(JobTileVMs);
        View.Filter = null;

    }

第3步:我的ListBox绑定到View

private ICollectionView view;
    public ICollectionView View
    {
        get { return view; }
        set
        {
            Set(ref view, value);
        }
    }

步骤4:点击用户按钮后,运行过滤器

private void FilterCustomerJobs()
    {
        View.Filter = item =>
        {
            JobTileVM vm = item as JobTileVM;
            if (vm.Jobs[0].Customer.StartsWith("SomeCustomer")) return true;
            return false;
        };
    }
private void FilterCustomerJobs2()
    {
        View.Filter = item =>
        {
            JobTileVM vm = item as JobTileVM;
            if (vm.Jobs[0].Customer.StartsWith("SomeOtherCustomer")) return true;
            return false;
        };
    }

所以我现在所处的位置,过滤确实成功地过滤了显示的列表,但如果我在两个过滤器功能之间来回切换,我的记忆将继续增长。

我尝试了一下并没有提出太多,但我确实注意到我的view属性有一个参数UseLocalArray为true,或类似名称的东西。

那么,我做错了什么,我应该怎么做呢?

0 个答案:

没有答案