Проблема с памятью в приложении WPF при использовании linq

В настоящее время я выискиваю утечки памяти в нашем приложении, и когда дело доходит до моделей представления, которые выполняют любые запросы 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?

1 ответ

.ToList() Перечисляет всю коллекцию и сохраняет копию в памяти. Обычно это не полезно, если вы не собираетесь использовать всю информацию в коллекции. Попробуйте удалить .ToList() и посмотрим, что получится. Вы должны ожидать немедленной экономии.

Чтобы пролить свет на +<>c вещь, я полагаю, что это происходит от того, что это общий тип. Исходя из кода, который вы указали, я понимаю, что тип List<Boolean>,

Другие вопросы по тегам