内存不足异常:添加一个范围

本文关键字:一个 范围 异常 添加 内存不足 | 更新日期: 2023-09-27 18:13:31

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

内存不足异常:添加一个范围

我不确定,什么影响将使用事务,但你可以试试这个:

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