Проблема с памятью в приложении 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>
,