Без этих операций LINQ ObjectEqualityComparer не сохраняется.
Неясно, является ли это ожидаемым поведением или нет. Я сообщаю об этой проблеме, чтобы запросить разъяснения по следующему вопросу:
A) Является ли это ожидаемым поведением?
B) Если это ожидаемое поведение, следует ли его рассматривать как «не проблему»?
C) Если это не ожидаемое поведение, дайте рекомендации, как устранить или избежать утечки памяти?
Код: Выделить всё
public partial class MainWindow : Window
{
private List _listOfColumns;
public List ListOfColumns
{
get { return _listOfColumns; }
set { _listOfColumns = value; }
}
public MainWindow()
{
InitializeComponent();
}
private void CallingLINQQueriesButton_Click(object sender, RoutedEventArgs e)
{
_listOfColumns = new List();
for (int i = 0; i < 5; i++)
{
_listOfColumns.Add(new CustomColumn());
}
// Codes causing memory leak
_listOfColumns.Except(_listOfColumns.Where(x => x == null)).ToList();
_listOfColumns.Intersect(_listOfColumns.Where(x => x != null)).ToList();
_listOfColumns.Where(x => x != null).ToList();
_listOfColumns.FirstOrDefault(x => x != null);
}
}
изображение профилировщика после выполнения запросов LINQ и перед вызовом Dispose
Результат профилировщика: после удаления списка
изображение профилировщика после выполнения запросов LINQ и вызова Dispose
Путь к корням
Путь к корням
Подробнее здесь: https://stackoverflow.com/questions/798 ... operations
Мобильная версия