我有以下方法用于循环遍历表,在每一行中更改一些值并将更改保存回数据库。为了让事情进展得更快,我以 10,000 行为一组获取数据。这是一个包含超过 2500 万条记录的大表。
问题是我的应用程序似乎没有释放任何内存。我尝试将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