我有一个程序,它将从数据库中读取 100 万条记录,并在经过一些处理后将记录插入到另一个表中。因此,程序调用 DAO API 来获取 100 万条记录并在内存中循环它们。插入也是使用 DAO API 来进行插入。每个 DAO API 部分都实现为
public static void Main(string[] args)
{
List<TableA> tableAs = GetTableAs();
TableB tableB = null;
foreach (var tableA in tableAs) {
tableB.id = tableA.id;
// ...
// here I copy/modify records from table A
// ...
InsertTableB(tableB);
}
}
public static List<TableA> GetTableAs()
{
using (var ctx = new TableDataContext())
{
var entities = from e in ctx.tableAs
select e;
return new List<tableA>(entities);
}
}
public static void InsertTableB(TableB tableB)
{
using (var ctx = new TableDataContext())
{
ctx.tableBs.InsertOnSubmit(tableB);
ctx.SubmitChanges();
}
}
我的程序在插入 500k 后会遇到“内存不足”异常,并且非常一致。而且我注意到循环时内存使用量不断增加。我什至强制垃圾收集也无法回收任何内存。我与 LINQ 的交互是否有任何问题,导致内存被阻塞而不被释放。任何帮助都感激不尽。