我的应用程序正在处理从 MySQL 数据库检索的 100 万条记录。为了这样做,我使用 Linq 获取记录并使用 .Skip() 和 .Take() 每次处理 250 条记录。对于每个检索到的记录,我需要创建 0 到 4 个项目,并将它们添加到数据库中。因此,平均需要创建的总项目数量约为 200 万。
IQueryable<Object> objectCollection = dataContext.Repository<Object>();
int amountToSkip = 0;
IList<Object> objects = objectCollection.Skip(amountToSkip).Take(250).ToList();
while (objects.Count != 0)
{
using (dataContext = new LinqToSqlContext(new DataContext()))
{
foreach (Object objectRecord in objects)
{
// Create 0 - 4 Random Items
for (int i = 0; i < Random.Next(0, 4); i++)
{
Item item = new Item();
item.Id = Guid.NewGuid();
item.Object = objectRecord.Id;
item.Created = DateTime.Now;
item.Changed = DateTime.Now;
dataContext.InsertOnSubmit(item);
}
}
dataContext.SubmitChanges();
}
amountToSkip += 250;
objects = objectCollection.Skip(amountToSkip).Take(250).ToList();
}
现在问题出在创建项目时。当运行应用程序(甚至没有使用dataContext)时,内存持续增加。就好像这些项目永远不会被处理掉一样。是否有人注意到我做错了什么?
提前致谢!