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