Утечка памяти: ObjectEqualityComparer сохраняется после операций LINQC#

Место общения программистов C#
Ответить
Anonymous
 Утечка памяти: ObjectEqualityComparer сохраняется после операций LINQ

Сообщение Anonymous »

При выполнении запросов LINQ, таких как Where, Except, Intersect, Union и FirstOrDefault, в списке профилировщик памяти показывает, что экземпляр ObjectEqualityComparer сохраняется и рассматривается как утечка памяти в профилировщике.
Без этих операций 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
изображение профилировщика после выполнения запросов LINQ и перед вызовом Dispose
Результат профилировщика: после удаления списка
изображение профилировщика после выполнения запросов LINQ и вызова Dispose
Путь к корням
Путь к корням

Подробнее здесь: https://stackoverflow.com/questions/798 ... operations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»