У меня были некоторые проблемы с LINQ-To-SQL, связанные с использованием памяти. Я использую его в службе Windows, чтобы выполнить некоторую обработку, и я перебираю большой объем данных, которые извлекаю из контекста. Да, я знаю, что мог бы сделать это с помощью хранимой процедуры, но есть причины, по которым это было бы не идеальным решением.
Во всяком случае, в основном я вижу, что память не освобождается даже после того, как я позвонил context.SubmitChanges()
. Таким образом, я вынужден делать всевозможные странные вещи, например, извлекать 100 записей за раз или создавать несколько контекстов, чтобы они все выполняли отдельные задачи. Если я оставлю тот же DataContext
и использую его позже для других вызовов, он просто съедает все больше и больше памяти. Даже если я вызову Clear()
в массиве "var tableRows
", который мне возвращает запрос, задаю для него значение null и вызову SYstem.GC.Collect()
- он все равно не освобождает память.
Теперь я прочитал кое-что о том, как вы должны быстро использовать DataContexts
и быстро их утилизировать, но кажется, что они должны быть способом заставить контекст сбросить все свои данные (или все свои данные отслеживания для определенной таблицы) в определенный момент, чтобы гарантировать, что память свободна.
Кто-нибудь знает, какие шаги гарантируют освобождение памяти?