内存异常:添加范围

时间:2014-07-17 13:31:21

标签: c# sql out-of-memory

下面的代码在导入数据库时​​返回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();
}

1 个答案:

答案 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();
}