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