У меня есть следующий метод для циклического перемещения по таблице, изменение некоторых значений в каждой строке и сохранение chages обратно в базу данных. Чтобы ускорить работу, я получаю данные в наборах из 10 000 строк. Это большая таблица с более чем 25 миллионами записей.Как освободить память?
Проблема в том, что мое приложение, похоже, не освобождает память. Я попробовал переопределить переменную records
до nothing
или явно раскрыть сборщик мусора, но память остается там. Запуск встроенного профилирования VS10 Я вижу, что виновником является метод system.linq.enumerable.tolist()
, который занимает более 98% моей памяти. Как освободить эту память после вызова saveChanges
?
db = New databaseEntities
Dim size = 25000000
Dim stepSize = 10000
For i = 0 to size Step stepSize
Dim sql = (From A In db.table).OrderBy(Function(A) A.Column).Skip(i).Take(stepSize)
Dim records As New List(Of table)
records = sql.ToList
For Each record In records
'do some work
Next
db.SaveChanges()
records = Nothing
GC.Collect()
Next
Вариант 2 очень медленный. Занимает около минуты, чтобы отделить 10 000 записей (в сравнении обновление их занимает около 2 секунд). Так что, я думаю, я собираюсь пойти с опцией 1. – Pavel