我有以下循环表的方法,改变每一行中的一些值并将chages保存回数据库。为了让事情变得更快,我正在以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
选项2非常慢。花费大约一分钟来分离10,000条记录(相比之下,更新大约需要2秒钟)。所以我想我会选择1. – Pavel 2010-11-04 12:04:14