0

我目前正在寻找我们应用程序中的内存泄漏,当涉及到执行任何 linq 查询的视图模型时,我在内存中找到了一个具有该命名空间的对象。我正在使用 dotMemory 进行检查,它列出了带有 +<>c 结尾的对象。我没有找到任何解释这是什么类型的对象,以及它是否存在于内存中是否是一个真正的问题,但我发现它与 linq 查询有关。重现此代码的代码,如您所见,从未使用过 Linq 查询结果。

 public class myViewModel : PropertyChangedBase
 {

    public myViewModel()
    {
        var memissue = _dummyList.ToList().Any(c => c == false);
    }

    public string SomeBoundProperty
    {
        get { return _someBoundProperty; }
        set
        {
            if (value == _someBoundProperty) return;
            _someBoundProperty = value;
            NotifyOfPropertyChange();
        }
    }
 }

来自点内存的快照: 在此处输入图像描述

我希望有人能解释一下 a +<>c 是什么类型的对象,也许为什么它没有从内存中释放,或者这只是 Linq 的工作方式?

4

1 回答 1

0

.ToList()枚举整个集合并将副本存储在内存中。如果您不打算使用集合中的所有信息,这通常没有用。尝试删除.ToList(),看看会发生什么。您应该会立即看到节省。

为了阐明这+<>c件事,我相信这是因为它是一个泛型类型。我从您提供的代码中推断出类型是真的List<Boolean>.

于 2017-01-06T15:35:15.417 回答