下面的代码在导入数据库时返回OutOfMemoryException
,我需要导入40000个不同的概念,我的计算机可以容纳那么多,但是我认为一次可以添加多少个限制。登记/>
我想要做的是使它一次添加1000保存更改然后重复此过程,直到它通过整个数据库...
怎么会这样呢?
public static void writeOutConcepts(List<Gnome.Data.Concept> concepts, HttpResponseBase Response)
{
var ctx = new GnomeContext();
Response.Write("Writing out concepts: \n");
Response.Flush();
try
{
ctx.Concepts.AddRange(concepts);
}
catch (Exception error)
{
Response.Write(error.Message);
Response.Write(error.StackTrace);
Response.Flush();
throw;
}
Response.Write("Writing of Concepts complete\n\n");
ctx.SaveChanges();
}
答案 0 :(得分:1)
我不确定,使用交易会产生什么影响,但你可以试试这个:
using (var transaction = ctx.Database.BeginTransaction())
{
int i = 0;
foreach(var concept in concepts)
{
ctx.Concepts.Add(concept);
i++;
if (i >= 1000)
{
i = 0;
ctx.SaveChanges();
}
}
ctx.SaveChanges()
transaction.Commit();
}